当前位置: 首页 > 知识库问答 >
问题:

为什么Javascript不能从字符串文本解析这个JSON数组?

朱雅惠
2023-03-14

我想做的很简单。将这个包含json对象的数组解析为Javascript数组。

var merchantsJson = JSON.parse('[{"id":61693,"name":"Más"},{"id":61690,"name":"\u0027\u0022\u003C/div\u003E"}]');

但是unicode字符\u003C似乎破坏了解析器。在chrome控制台中,我看到“UncaughtSyntaxerror:意外令牌”

多一点信息。以上是代码的计算结果。实际上,代码包含一个jsp表达式。

var merchantsJson = JSON.parse('${jsonArr}');

如果我删除单引号,没有问题,但是eclipse给我一个“丢失分号”的错误消息。是否可以解析数组与引号,因为我试图做的?

共有3个答案

佟和安
2023-03-14

尝试将\u替换为\\u。否则,JSON解析器将接收已解码的Unicode,这将创建JSON。

解沈义
2023-03-14

因为您的字符串文本中有一个额外的,由\u0022编码:

> '[{"id":61693,"name":"Más"},{"id":61690,"name":"\u0027\u0022\u003C/div\u003E"}]'
[{"id":61693,"name":"Más"},{"id":61690,"name":"'"</div>"}]

简而言之,字符串中的JSON无效。您需要转义字符串文本(“')\u0022中引号的unicode转义序列

JSON.parse('[{"id":61693,"name":"Más"},{"id":61690,"name":"\u0027\\u0022\u003C/div\u003E"}]'
//                                                               ^

或转义引用字符('\"

JSON.parse('[{"id":61693,"name":"Más"},{"id":61690,"name":"\u0027\\\u0022\u003C/div\u003E"}]');
//                                                               ^^

然而,实际上根本不需要使用JSON。只需将JS数组文本输出到代码中:

var merchantsJson = ${jsonArr};

甄华清
2023-03-14

${jsonArr}的插值已经是一个JavaScript对象。当您将其包装在'${jsonArr}'中时,这会将其转换为字符串,您必须使用JSON。解析

没有必要把它变成字符串。您只需执行var-merchantsArray=${jsonArr}。JSON构造已经可以与JavaScript代码互操作。

 类似资料:
  • 我试图用Moshi解析一个Json响应,我遇到的问题是键的值是字符串上的Json换行: 这是我的课

  • 然而,Antlr似乎不喜欢我在两个不同的地方使用“函数”。据我所知,语法甚至没有歧义。 在下面的语法中,如果我删除第1行,生成的解析器解析示例输入没有问题。另外,如果我更改第2行或第3行中的令牌字符串,使它们不相等,解析器就会工作。 我得到的语法错误是: 测试生成的解析器的程序:

  • 无法弄清楚如何将以下带有GSON的JSON字符串解析为任何适当的对象以检索其数据。字符串是: 我发现方括号表示它是一个ArrayList,但里面还有另一个对象。 如果我试着在ArrayList上搜索: 然后它抱怨: 如果我尝试相反的方法: 然后它也在抱怨: 不理解该格式:-/ 感谢您的任何建议!

  • 当我将Bean字段切换到public时,所有工作都很好,但我真的想使用getter和setter(最好是由Lombok生成的)。

  • 大家好,我的问题是我为android开发了一个应用程序,它使用json解析器从我的php Web服务中获取数据并将其显示在listview中,但当我运行该应用程序时,它显示了以下内容: 日志: 我的代码: 具有列表视图的活动并调用json解析器: Json解析器在这个我只改变了这一行BufferedReader=new BufferedReader(new InputStreamReader(is

  • 为什么我无法解析符号“r”..??。当我在这个.class文件上创建新活动时,我会遇到一个问题,为什么我不知道在创建类之后我什么也没做。(在R.Layout.Dashboard中)。(“红色R”)。 请帮帮我.