Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby json解析器错误-意外标记_Ruby_Json - Fatal编程技术网

Ruby json解析器错误-意外标记

Ruby json解析器错误-意外标记,ruby,json,Ruby,Json,我得到一个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

我得到一个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响应数组中是否有任何错误。

试试这个。它起作用了

require 'json'
my_obj = JSON.parse("your json string", :symbolize_names => true)
我试图解析它,但它抛出了解析器错误。我试了如下 parse(File.read('demo'))。演示文件包含json 我粘贴的回应

首先,您发布的json是一个ruby字符串。ruby将其解析为json,没有错误。但是,如果将该字符串粘贴到文件中,则由于转义序列的原因,它将不是有效的json,其中转义序列最多的是
\“

在ruby字符串中,两个字符长的序列
\“
被转换为一个字符;在一个文件中,相同的序列有两个字符长:a
\
和a
。换句话说,ruby字符串中合法的转义序列在粘贴到文件中时并不代表相同的内容

另一个例子:在一个ruby字符串中,转义序列
\20AC
是一个单一字符——欧元符号。但是,如果将该序列粘贴到一个文件中,它将有五个字符长:a
\
,a
2
,a
0
,a
a
,a
C

评论回复:

json的开头有一个不可见(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]

我在读取JSON文件时遇到了这个错误,结果发现问题在于JSON.parse不喜欢UTF-8编码的文件。当我第一次将文件编码为ASCII(=ISO 8859-1)时,一切正常。

什么是“ruby脚本数组?”“?无法复制。它已按原样成功解析。您是如何尝试解析它的?Ruby将按原样解析它:@Johnsyweb我试图解析它,但它抛出了解析器错误。我尝试了下面的JSON.parse(File.read('demo'))。演示文件包含我粘贴的json响应。然后还缺少其他内容。你能展示你的代码吗?还有,你用的是什么版本的ruby?哦。我懂了。。所以,若我需要从文件中读取并解析它,那个么我该怎么做呢。。但在代码的另一个场景中,我需要解析它,而不将其写入文件。因此,基本上我的代码将尝试使用ruby脚本获取给定json url的主体,并将其存储在变量中。之后,它将尝试解析响应。将字符串写入文件。例如,如果您将字符串
“hello\”world\“\n”
写入一个文件,然后用文本编辑器打开该文件,您将看到
hello“world”
。如果使用ruby程序读取该文件,您将获得字符串:
“hello\”world\“\n”
,因此基本上我的代码将尝试使用ruby脚本获取给定json url的主体并将其存储在变量中。之后,它将尝试解析响应。解析掉。如果http请求返回的字符串是有效的json,ruby将为您解析它。http请求返回的字符串是有效的json。我在jsonlint中进行了尝试,结果显示它是有效的。但它仍然抛出了解析器错误,这让我感到奇怪。