我有这个相当大的json,我将其输入const char
数组,如下所示:
const char tl_json[] = "["
"{"
"\"created_at\": \"Thu Apr 06 15:28:43 +0000 2017\","
"\"id\": 850007368138018817,"
"\"id_str\": \"850007368138018817\","
"\"text\": \"RT @TwitterDev: 1/ Today we're sharing our vision for the future of the Twitter API platform!\nhttps://twitter.com","
"\"truncated\": false,"
"\"entities\": {"
"\"hashtags\": [],"
"\"symbols\": [],"
"\"user_mentions\": ["
"{"
"\"screen_name\": \"TwitterDev\","
"\"name\": \"TwitterDev\","
"\"id\": 2244994945,"
"\"id_str\": \"2244994945\","
"\"indices\": ["
"3,"
"14"
"]"
"}"
"],"
"\"urls\": ["
"{"
"\"url\": \"https://twitter.com\","
"\"expanded_url\": \"https://cards.twitter.com/cards/18ce53wgo4h/3xo1c\","
"\"display_url\": \"cards.twitter.com/cards/18ce53wg\","
"\"indices\": ["
"94,"
"117"
"]"
"}"
"]"
"},"
"\"source\": \"<a href='http://twitter.com' rel='nofollow'>Twitter Web Client</a>\","
"\"in_reply_to_status_id\": null,"
"\"in_reply_to_status_id_str\": null,"
"\"in_reply_to_user_id\": null,"
"\"in_reply_to_user_id_str\": null,"
"\"in_reply_to_screen_name\": null,"
"\"user\": {"
"\"id\": 6253282,"
"\"id_str\": \"6253282\","
"\"name\": \"Twitter API\","
"\"screen_name\": \"twitterapi\","
"\"location\": \"San Francisco, CA\","
"\"description\": \"The Real Twitter API. I tweet about API changes, service issues and happily answer questions about Twitter and our API. Don't get an answer? It's on my website.\","
"\"url\": \"https://dev.twitter.com\","
"\"entities\": {"
"\"url\": {"
"\"urls\": ["
"{"
"\"url\": \"https://dev.twitter.com\","
"\"expanded_url\": \"https://dev.twitter.com\","
"\"display_url\": \"dev.twitter.com\","
"\"indices\": ["
"0,"
"22"
"]"
"}"
"]"
"},"
"\"description\": {"
"\"urls\": []"
"}"
"},"
"\"protected\": false,"
"\"followers_count\": 6172353,"
"\"friends_count\": 46,"
"\"listed_count\": 13091,"
"\"created_at\": \"Wed May 23 06:01:13 +0000 2007\","
"\"favourites_count\": 26,"
"\"utc_offset\": -25200,"
"\"time_zone\": \"Pacific Time (US & Canada)\","
"\"geo_enabled\": true,"
"\"verified\": true,"
"\"statuses_count\": 3583,"
"\"lang\": \"en\","
"\"contributors_enabled\": false,"
"\"is_translator\": false,"
"\"is_translation_enabled\": false,"
"\"profile_background_color\": \"C0DEED\","
"\"profile_background_image_url\": \"http://pbs.twimg.com/profile_background_images/656927849/miyt9dpjz77sc0w3d4vj.png\","
"\"profile_background_image_url_https\": \"https://pbs.twimg.com/profile_background_images/656927849/miyt9dpjz77sc0w3d4vj.png\","
"\"profile_background_tile\": true,"
"\"profile_image_url\": \"http://pbs.twimg.com/profile_images/2284174872/7df3h38zabcvjylnyfe3_normal.png\","
"\"profile_image_url_https\": \"https://pbs.twimg.com/profile_images/2284174872/7df3h38zabcvjylnyfe3_normal.png\","
"\"profile_banner_url\": \"https://pbs.twimg.com/profile_banners/6253282/1431474710\","
"\"profile_link_color\": \"0084B4\","
"\"profile_sidebar_border_color\": \"C0DEED\","
"\"profile_sidebar_fill_color\": \"DDEEF6\","
"\"profile_text_color\": \"333333\","
"\"profile_use_background_image\": true,"
"\"has_extended_profile\": false,"
"\"default_profile\": false,"
"\"default_profile_image\": false,"
"\"following\": true,"
"\"follow_request_sent\": false,"
"\"notifications\": false,"
"\"translator_type\": \"regular\""
"},"
"\"geo\": null,"
"\"coordinates\": null,"
"\"place\": null,"
"\"contributors\": null,"
"\"retweeted_status\": {"
"\"created_at\": \"Thu Apr 06 15:24:15 +0000 2017\","
"\"id\": 850006245121695744,"
"\"id_str\": \"850006245121695744\","
"\"text\": \"1/ Today blank sharing our vision for the future of the Twitter API platform!\nhttps://blog.twitter.com/2017/building-the-future-of-the-twitter-api-platform\","
"\"truncated\": false,"
"\"entities\": {"
"\"hashtags\": [],"
"\"symbols\": [],"
"\"user_mentions\": [],"
"\"urls\": ["
"{"
"\"url\": \"https://twitter.com\","
"\"expanded_url\": \"https://cards.twitter.com/cards/18ce53wgo4h/3xo1c\","
"\"display_url\": \"cards.twitter.com/cards/18ce53wg\","
"\"indices\": ["
"78,"
"101"
"]"
"}"
"]"
"},"
"\"source\": \"<a href='http://twitter.com' rel='nofollow'>Twitter Web Client</a>\","
"\"in_reply_to_status_id\": null,"
"\"in_reply_to_status_id_str\": null,"
"\"in_reply_to_user_id\": null,"
"\"in_reply_to_user_id_str\": null,"
"\"in_reply_to_screen_name\": null,"
"\"user\": {"
"\"id\": 2244994945,"
"\"id_str\": \"2244994945\","
"\"name\": \"TwitterDev\","
"\"screen_name\": \"TwitterDev\","
"\"location\": \"Internet\","
"\"description\": \"Your official source for Twitter Platform news, updates & events. Need technical help? Visit https://twitter.com #TapIntoTwitter\","
"\"url\": \"https://twitter.com\","
"\"entities\": {"
"\"url\": {"
"\"urls\": ["
"{"
"\"url\": \"https://twitter.com\","
"\"expanded_url\": \"https://dev.twitter.com/\","
"\"display_url\": \"dev.twitter.com\","
"\"indices\": ["
"0,"
"23"
"]"
"}"
"]"
"},"
"\"description\": {"
"\"urls\": ["
"{"
"\"url\": \"https://twitter.com\","
"\"expanded_url\": \"https://twittercommunity.com/\","
"\"display_url\": \"twittercommunity.com\","
"\"indices\": ["
"93,"
"116"
"]"
"}"
"]"
"}"
"},"
"\"protected\": false,"
"\"followers_count\": 465425,"
"\"friends_count\": 1523,"
"\"listed_count\": 1168,"
"\"created_at\": \"Sat Dec 14 04:35:55 +0000 2013\","
"\"favourites_count\": 2098,"
"\"utc_offset\": -25200,"
"\"time_zone\": \"Pacific Time (US & Canada)\","
"\"geo_enabled\": true,"
"\"verified\": true,"
"\"statuses_count\": 3031,"
"\"lang\": \"en\","
"\"contributors_enabled\": false,"
"\"is_translator\": false,"
"\"is_translation_enabled\": false,"
"\"profile_background_color\": \"FFFFFF\","
"\"profile_background_image_url\": \"http://abs.twimg.com/images/themes/theme1/bg.png\","
"\"profile_background_image_url_https\": \"https://abs.twimg.com/images/themes/theme1/bg.png\","
"\"profile_background_tile\": false,"
"\"profile_image_url\": \"http://pbs.twimg.com/profile_images/530814764687949824/npQQVkq8_normal.png\","
"\"profile_image_url_https\": \"https://pbs.twimg.com/profile_images/530814764687949824/npQQVkq8_normal.png\","
"\"profile_banner_url\": \"https://pbs.twimg.com/profile_banners/2244994945/1396995246\","
"\"profile_link_color\": \"0084B4\","
"\"profile_sidebar_border_color\": \"FFFFFF\","
"\"profile_sidebar_fill_color\": \"DDEEF6\","
"\"profile_text_color\": \"333333\","
"\"profile_use_background_image\": false,"
"\"has_extended_profile\": false,"
"\"default_profile\": false,"
"\"default_profile_image\": false,"
"\"following\": true,"
"\"follow_request_sent\": false,"
"\"notifications\": false,"
"\"translator_type\": \"regular\""
"},"
"\"geo\": null,"
"\"coordinates\": null,"
"\"place\": null,"
"\"contributors\": null,"
"\"is_quote_status\": false,"
"\"retweet_count\": 284,"
"\"favorite_count\": 399,"
"\"favorited\": false,"
"\"retweeted\": false,"
"\"possibly_sensitive\": false,"
"\"lang\": \"en\""
"},"
"\"is_quote_status\": false,"
"\"retweet_count\": 284,"
"\"favorite_count\": 0,"
"\"favorited\": false,"
"\"retweeted\": false,"
"\"possibly_sensitive\": false,"
"\"lang\": \"en\""
"}]";
当我尝试像这样解析它时:
char tl_buffer[sizeof(tl_json)];
memcpy(tl_buffer, tl_json, sizeof(tl_json));
ParseResult ok = tl_document.ParseInsitu(tl_buffer);
if (!ok) {
fprintf(stderr, "JSON parse error: %s (%u)",
GetParseError_En(ok.Code()), ok.Offset());
exit(EXIT_FAILURE);
}
我收到以下错误:
JSON parse error: Invalid encoding in string. (207)
而且我不确定我复制的json b / c有什么问题。粘贴自Twitter API json (it's the json under "Example Response")
当我复制并粘贴时,我注意到“我们”中的'
与普通'
不同。我还修复了复制和粘贴错误的...
b / c。 B / c我在mbed
编译时没有收到关于这些字符的警告,但这并没有解决我的主要问题:让json解析。
任何帮助将不胜感激!
注意:为了更好地查看json我已经包含了缩进版本:
"["
"{"
"\"created_at\": \"Thu Apr 06 15:28:43 +0000 2017\","
" \"id\": 850007368138018817,"
" \"id_str\": \"850007368138018817\","
" \"text\": \"RT @TwitterDev: 1/ Today we’re sharing our vision for the future of the Twitter API platform!\nhttps://blog.twitter.com/2017/building-the-future-of-the-twitter-api-platform\","
" \"truncated\": false,"
" \"entities\": {"
" \"hashtags\": [],"
" \"symbols\": [],"
" \"user_mentions\": ["
" {"
" \"screen_name\": \"TwitterDev\","
" \"name\": \"TwitterDev\","
" \"id\": 2244994945,"
" \"id_str\": \"2244994945\","
" \"indices\": ["
" 3,"
" 14"
" ]"
" }"
" ],"
" \"urls\": ["
" {"
" \"url\": \"https://twitter.com\","
" \"expanded_url\": \"https://cards.twitter.com/cards/18ce53wgo4h/3xo1c\","
" \"display_url\": \"cards.twitter.com/cards/18ce53wg…\","
" \"indices\": ["
" 94,"
" 117"
" ]"
" }"
" ]"
" },"
" \"source\": \"<a href='http://twitter.com' rel='nofollow'>Twitter Web Client</a>\","
" \"in_reply_to_status_id\": null,"
" \"in_reply_to_status_id_str\": null,"
" \"in_reply_to_user_id\": null,"
" \"in_reply_to_user_id_str\": null,"
" \"in_reply_to_screen_name\": null,"
" \"user\": {"
" \"id\": 6253282,"
" \"id_str\": \"6253282\","
" \"name\": \"Twitter API\","
" \"screen_name\": \"twitterapi\","
" \"location\": \"San Francisco, CA\","
" \"description\": \"The Real Twitter API. I tweet about API changes, service issues and happily answer questions about Twitter and our API. Don't get an answer? It's on my website.\","
" \"url\": \"https://twitter.com\","
" \"entities\": {"
" \"url\": {"
" \"urls\": ["
" {"
" \"url\": \"https://twitter.com\","
" \"expanded_url\": \"https://dev.twitter.com\","
" \"display_url\": \"dev.twitter.com\","
" \"indices\": ["
" 0,"
" 22"
" ]"
" }"
" ]"
" },"
" \"description\": {"
" \"urls\": []"
" }"
" },"
" \"protected\": false,"
" \"followers_count\": 6172353,"
" \"friends_count\": 46,"
" \"listed_count\": 13091,"
" \"created_at\": \"Wed May 23 06:01:13 +0000 2007\","
" \"favourites_count\": 26,"
" \"utc_offset\": -25200,"
" \"time_zone\": \"Pacific Time (US & Canada)\","
" \"geo_enabled\": true,"
" \"verified\": true,"
" \"statuses_count\": 3583,"
" \"lang\": \"en\","
" \"contributors_enabled\": false,"
" \"is_translator\": false,"
" \"is_translation_enabled\": false,"
" \"profile_background_color\": \"C0DEED\","
" \"profile_background_image_url\": \"http://pbs.twimg.com/profile_background_images/656927849/miyt9dpjz77sc0w3d4vj.png\","
" \"profile_background_image_url_https\": \"https://pbs.twimg.com/profile_background_images/656927849/miyt9dpjz77sc0w3d4vj.png\","
" \"profile_background_tile\": true,"
" \"profile_image_url\": \"http://pbs.twimg.com/profile_images/2284174872/7df3h38zabcvjylnyfe3_normal.png\","
" \"profile_image_url_https\": \"https://pbs.twimg.com/profile_images/2284174872/7df3h38zabcvjylnyfe3_normal.png\","
" \"profile_banner_url\": \"https://pbs.twimg.com/profile_banners/6253282/1431474710\","
" \"profile_link_color\": \"0084B4\","
" \"profile_sidebar_border_color\": \"C0DEED\","
" \"profile_sidebar_fill_color\": \"DDEEF6\","
" \"profile_text_color\": \"333333\","
" \"profile_use_background_image\": true,"
" \"has_extended_profile\": false,"
" \"default_profile\": false,"
" \"default_profile_image\": false,"
" \"following\": true,"
" \"follow_request_sent\": false,"
" \"notifications\": false,"
" \"translator_type\": \"regular\""
" },"
" \"geo\": null,"
" \"coordinates\": null,"
" \"place\": null,"
" \"contributors\": null,"
" \"retweeted_status\": {"
" \"created_at\": \"Thu Apr 06 15:24:15 +0000 2017\","
" \"id\": 850006245121695744,"
" \"id_str\": \"850006245121695744\","
" \"text\": \"1/ Today we’re sharing our vision for the future of the Twitter API platform!\nhttps://twitter.com\","
" \"truncated\": false,"
" \"entities\": {"
" \"hashtags\": [],"
" \"symbols\": [],"
" \"user_mentions\": [],"
" \"urls\": ["
" {"
" \"url\": \"https://twitter.com\","
" \"expanded_url\": \"https://cards.twitter.com/cards/18ce53wgo4h/3xo1c\","
" \"display_url\": \"cards.twitter.com/cards/18ce53wg…\","
" \"indices\": ["
" 78,"
" 101"
" ]"
" }"
" ]"
" },"
" \"source\": \"<a href='http://twitter.com' rel='nofollow'>Twitter Web Client</a>\","
" \"in_reply_to_status_id\": null,"
" \"in_reply_to_status_id_str\": null,"
" \"in_reply_to_user_id\": null,"
" \"in_reply_to_user_id_str\": null,"
" \"in_reply_to_screen_name\": null,"
" \"user\": {"
" \"id\": 2244994945,"
" \"id_str\": \"2244994945\","
" \"name\": \"TwitterDev\","
" \"screen_name\": \"TwitterDev\","
" \"location\": \"Internet\","
" \"description\": \"Your official source for Twitter Platform news, updates & events. Need technical help? Visit https://twitter.com ⌨️ #TapIntoTwitter\","
" \"url\": \"https://twitter.com\","
" \"entities\": {"
" \"url\": {"
" \"urls\": ["
" {"
" \"url\": \"https://twitter.com\","
" \"expanded_url\": \"https://dev.twitter.com/\","
" \"display_url\": \"dev.twitter.com\","
" \"indices\": ["
" 0,"
" 23"
" ]"
" }"
" ]"
" },"
" \"description\": {"
" \"urls\": ["
" {"
" \"url\": \"https://twitter.com\","
" \"expanded_url\": \"https://twittercommunity.com/\","
" \"display_url\": \"twittercommunity.com\","
" \"indices\": ["
" 93,"
" 116"
" ]"
" }"
" ]"
" }"
" },"
" \"protected\": false,"
" \"followers_count\": 465425,"
" \"friends_count\": 1523,"
" \"listed_count\": 1168,"
" \"created_at\": \"Sat Dec 14 04:35:55 +0000 2013\","
" \"favourites_count\": 2098,"
" \"utc_offset\": -25200,"
" \"time_zone\": \"Pacific Time (US & Canada)\","
" \"geo_enabled\": true,"
" \"verified\": true,"
" \"statuses_count\": 3031,"
" \"lang\": \"en\","
" \"contributors_enabled\": false,"
" \"is_translator\": false,"
" \"is_translation_enabled\": false,"
" \"profile_background_color\": \"FFFFFF\","
" \"profile_background_image_url\": \"http://abs.twimg.com/images/themes/theme1/bg.png\","
" \"profile_background_image_url_https\": \"https://abs.twimg.com/images/themes/theme1/bg.png\","
" \"profile_background_tile\": false,"
" \"profile_image_url\": \"http://pbs.twimg.com/profile_images/530814764687949824/npQQVkq8_normal.png\","
" \"profile_image_url_https\": \"https://pbs.twimg.com/profile_images/530814764687949824/npQQVkq8_normal.png\","
" \"profile_banner_url\": \"https://pbs.twimg.com/profile_banners/2244994945/1396995246\","
" \"profile_link_color\": \"0084B4\","
" \"profile_sidebar_border_color\": \"FFFFFF\","
" \"profile_sidebar_fill_color\": \"DDEEF6\","
" \"profile_text_color\": \"333333\","
" \"profile_use_background_image\": false,"
" \"has_extended_profile\": false,"
" \"default_profile\": false,"
" \"default_profile_image\": false,"
" \"following\": true,"
" \"follow_request_sent\": false,"
" \"notifications\": false,"
" \"translator_type\": \"regular\""
" },"
" \"geo\": null,"
" \"coordinates\": null,"
" \"place\": null,"
" \"contributors\": null,"
" \"is_quote_status\": false,"
" \"retweet_count\": 284,"
" \"favorite_count\": 399,"
" \"favorited\": false,"
" \"retweeted\": false,"
" \"possibly_sensitive\": false,"
" \"lang\": \"en\""
" },"
" \"is_quote_status\": false,"
" \"retweet_count\": 284,"
" \"favorite_count\": 0,"
" \"favorited\": false,"
" \"retweeted\": false,"
" \"possibly_sensitive\": false,"
" \"lang\": \"en\""
"}]";
答案 0 :(得分:1)
你的问题是你没有逃避输入中的所有反斜杠。因此,{C}编译器将\n
序列解释为换行符的转义序列,但JSON不允许字符串中的文字换行符。例如,尝试解析此问题,您将遇到同样的问题:
char const tl_json[] = "{\"a\":\"foo\nbar\"}";
这将生成以下字符串文字:
{"a":"foo
bar"}
由于字符串中嵌入了换行符,因此这不是有效的JSON。 JSON允许空格在标记之间显示,但字符串是单个标记,并且不允许在其中显示换行符。
您还需要转义反斜杠字符,以便C字符串包含\n
作为两个字符 - 反斜杠后跟n
- JSON解析器将其视为转义符序列并将其解析为嵌入式换行符。比较:
char const tl_json[] = "{\"a\":\"foo\\nbar\"}";
这会编码以下JSON字符串,将解析:
{"a":"foo\nbar"}
例如,此问题在您的代码中至少出现一次:
... future of the Twitter API platform!\nhttps://blog ...