我正在获取一个json响应数组,如下所示。
"[{\"id\":\"23886\",\"item_type\":2,\"name\":\"Equalizer\",\"label\":null,\"desc\":null,\"genre\":null,\"show_name\":null,\"img\":\"http:\\/\\/httpg3.scdn.arkena.com\\/10242\\/v2_images\\/tf1\\/0\\/tf1_media_ingest95290_image\\/tf1_media_ingest95290_image_0_208x277.jpg\",\"url\":\"\\/films\\/media-23886-Equalizer.html\",\"duration\":\"2h27mn\",\"durationtime\":\"8865\",\"audio_languages\":null,\"prod\":null,\"year\":null,\"vf\":\"1\",\"vost\":\"1\",\"sd\":true,\"hd\":false,\"sdprice\":\"4.99\",\"hdprice\":null,\"sdfile\":null,\"hdfile\":null,\"sdbundle\":\"12771\",\"hdbundle\":\"12771\",\"teaser\":\"23887\",\"att_getter\":\"Tout le monde a le droit \\u00e0 la justice\",\"orig_prod\":null,\"director\":null,\"actors\":null,\"csa\":\"CSA_6\",\"season\":null,\"episode\":null,\"typeid\":\"1\",\"isfav\":false,\"viewersrating\":\"4.0\",\"criticsrating\":\"3.0\",\"onThisPf\":1},{\"id\":\"23998\",\"item_type\":2,\"name\":\"Le Labyrinthe\",\"label\":null,\"desc\":null,\"genre\":null,\"show_name\":null,\"img\":\"http:\\/\\/httpg3.scdn.arkena.com\\/10242\\/v2_images\\/tf1\\/1\\/tf1_media_ingest94727_image\\/tf1_media_ingest94727_image_1_208x277.jpg\",\"url\":\"\\/films\\/media-23998-Le_Labyrinthe.html\",\"duration\":\"1h48mn\",\"durationtime\":\"6533\",\"audio_languages\":null,\"prod\":null,\"year\":null,\"vf\":\"1\",\"vost\":\"1\",\"sd\":true,\"hd\":false,\"sdprice\":\"4.99\",\"hdprice\":null,\"sdfile\":null,\"hdfile\":null,\"sdbundle\":\"12699\",\"hdbundle\":\"12699\",\"teaser\":\"23999\",\"att_getter\":\"Saurez-vous r\\u00e9chapper du labyrinthe ?\",\"orig_prod\":null,\"director\":null,\"actors\":null,\"csa\":\"CSA_1\",\"season\":null,\"episode\":null,\"typeid\":\"1\",\"isfav\":false,\"viewersrating\":\"3.5\",\"criticsrating\":\"4.0\",\"onThisPf\":1},{\"id\":\"23688\",\"item_type\":2,\"name\":\"Gone Girl\",\"label\":null,\"desc\":null,\"genre\":null,\"show_name\":null,\"img\":\"http:\\/\\/httpg3.scdn.arkena.com\\/10242\\/v2_images\\/tf1\\/0\\/tf1_media_ingest92895_image\\/tf1_media_ingest92895_image_0_208x277.jpg\",\"url\":\"\\/films\\/media-23688-Gone_Girl.html\",\"duration\":\"2h22mn\",\"durationtime\":\"8579\",\"audio_languages\":null,\"prod\":null,\"year\":null,\"vf\":\"1\",\"vost\":\"1\",\"sd\":true,\"hd\":false,\"sdprice\":\"4.99\",\"hdprice\":null,\"sdfile\":null,\"hdfile\":null,\"sdbundle\":\"12507\",\"hdbundle\":\"12507\",\"teaser\":\"23689\",\"att_getter\":\"Il ne faut pas se fier aux apparences...\",\"orig_prod\":null,\"director\":null,\"actors\":null,\"csa\":\"CSA_2\",\"season\":null,\"episode\":null,\"typeid\":\"1\",\"isfav\":false,\"viewersrating\":\"4.0\",\"criticsrating\":\"4.5\",\"onThisPf\":1}]"
当我尝试解析它时,我得到了意外的令牌解析器错误,我认为这是由于响应开始和结束时的引号。
我错误地说解析器错误是由于响应开始和结束时的引号引起的。但我不确定为什么会这样。但是当我尝试解析json响应数组时,它确实会抛出错误。 知道json respnse数组中是否有任何错误。
答案 0 :(得分:2)
我试图解析它但它会抛出解析器错误。我尝试如下 JSON.parse(File.read('演示'))。演示文件包含json 我粘贴的回复。
首先,你发布的json是一个ruby字符串。并且ruby将其解析为json而没有错误。但是,如果将该字符串粘贴到文件中,由于转义序列,它将无效json,其中最多的是\"
。
在ruby字符串中,序列\"
(两个字符长)将转换为一个字符;在同一序列长度为两个字符的文件中:\
和"
。换句话说,在ruby String中合法的转义序列在粘贴到文件时不代表相同的东西。
另一个例子:在ruby String中,转义序列\20AC
是一个单一字符 - 欧元符号。但是,如果您将该序列粘贴到文件中,则该字符长度为五个字符:\
,2
,0
和A
,以及C
。
对评论的回应:
在json的开头有一个不可见的byte order mark(BOM),你可以通过执行来看到:
p resp
...产生输出:
\xEF\xBB\xBF[{\"id\":\"2388\" .....
BOM的UTF-8表示是字节序列 0xEF,为0xBB,为0xBF
字节顺序在UTF-8中没有意义,[4]因此它在UTF-8中的唯一用途是 在开始时发出信号,表示文本流以UTF-8编码。
您可以跳过前3个字节/字符,如下所示:
resp[3..-1]
答案 1 :(得分:1)
我在阅读JSON文件时遇到此错误,结果发现问题是JSON.parse不知何时不喜欢UTF-8编码的文件。当我第一次将文件编码为ASCII(= ISO 8859-1)时,一切都很顺利。
答案 2 :(得分:-1)
试试这个。它有效。
require 'json'
my_obj = JSON.parse("your json string", :symbolize_names => true)