Json Parsing error on formatted text

5 views (last 30 days)
Hi,
I have a script that reads formatted text from a Github release description. The text has bullets, some non-ASCII characters, etc. When I look at the string, the special characters are escaped (\r, etc). When I try to write this entire text block to another Github release, it fails with an "error parsing Json" error.
I believe this has to do with either a Conten-type header or UTF encoding, which I'm not fully familiar with.
Is there a straight-forward way in Matlab to read and write formatted text "as-is"?
Thanks.
Joe
  8 Comments
Joe Rustan
Joe Rustan on 29 Mar 2021
Thanks Walter.
The command that is being built is:
C:\Program Files\Git\mingw64\bin\curl.exe" --user "<userid:github credentials>" "https:<github-URL/org/repo/releases -d "tag_name: <name-of-tag>",
"target_commitish: <commit-id>"
"name:<name-of-release",
"body:<rel-body"
I may have missed a few double-quotes and commas in the copy/paste and content replacement, but the actual command works fine with several other repos, so I know it is successful. I also tried adding "Content-type:application/json at the end of the string, but I get the same "error parsing JSON" message.
It is clear the error is happening due to the rel-body containing non-ASCII characters and formatted with bullets, bold text, etc. (which is Github's standard markup language).
Thanks for any expert help I can get. Maybe there is a better way than using the 'curl' command?
Joe

Sign in to comment.

Accepted Answer

Mohammad Sami
Mohammad Sami on 29 Mar 2021
I assume this is the api you are using.
On the documentation they show the curl request as follows.
curl \
-X POST \
-H "Accept: application/vnd.github.v3+json" \
https://api.github.com/repos/octocat/hello-world/releases \
-d '{"tag_name":"tag_name"}'
I believe you need to form your entire curl request as json string.
From the code I see you are missing the opening and closing {} as well as formatting of your -d argument is not json compliant
For example it should be something like this.
%curl...-d '{"tag_name":"<name-of-tag>","target_commitish":"<commit-id>","name":<name-of-release>","body":"<rel-body>"}'
Or you could can create a struct in matlab with the required parameters then use jsonencode function to form the required json string.
postdata.tag_name = name-of-tag;
postdata.target_commitish = commit-id;
postdata.name = name-of-release;
postdata.body = rel-body;
data = jsonencode(postdata);

More Answers (0)

Products

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!