我有以下数据从服务器输入到服务器的js代码中。
{"triggers": [{"message_type": "sms","recipients": "[\"+91xxxxxxxxx\",\"+91xxxxxxxxx\"]","message": "This is a test"}]}
Run Code Online (Sandbox Code Playgroud)
我的代码以以下方式解析上述json字符串。
data = '{"triggers": [{"message_type": "sms","recipients": "[\"+91xxxxxxxx\",\"+91xxxxxxxx\"]","message": "This is a test"}]}'
parsed = JSON.parse(data);
Run Code Online (Sandbox Code Playgroud)
这引发以下异常
Uncaught SyntaxError: Unexpected token + in JSON at position 54
at JSON.parse (<anonymous>)
at eval (eval at <anonymous> (entry.html:2), <anonymous>:1:6)
at entry.html:298
Run Code Online (Sandbox Code Playgroud)
我做了一些进一步的挖掘,发现了json字符串的来源。这是我的python代码输入的字符串
data = {"recipients": "[\"+91xxxxxxxxx\",\"+91xxxxxxxx\"]"} # This data comes in from my database, and I can't do anything about what quotes are used.
javascript_supplied_data = json.dumps(data) #This data goes to the frontend via webhook
Run Code Online (Sandbox Code Playgroud)
我尝试通过此在线查看器将相同数据放入json视图中,但没有引发任何错误并正确显示了数据。
我不明白的是,我在python代码中执行了json.dumps,因此字符串响应应该是json可解析的。那么,为什么JSON.parse会引发此错误?
python端或javascript端的json库是否出了问题,还是我的菜鸟太多了?
请帮助我找出导致此问题的原因以及解决方法。
注意:我对来自服务器的字符串没有任何控制。
当您具有有效的JSON并将其放入字符串文字中时,JavaScript中文字符号所处理的转义符会使字符串有所不同。反斜杠被解释为用于转义下一个字符。
因此,要么必须遍历字符串文字并加倍所有反斜杠,要么可以将String.raw字符串文字作为模板字符串应用:
var data = String.raw`{"triggers": [{"message_type": "sms","recipients": "[\"+91xxxxxxxx\",\"+91xxxxxxxx\"]","message": "This is a test"}]}`;
var parsed = JSON.parse(data);
console.log(parsed);Run Code Online (Sandbox Code Playgroud)
但是请注意,您在问题开始时发布的JSON是有效的。
另一方面,您得到的错误指示第\"一个之前的just +被解释为just "。这意味着\从服务器接收到字符串时,实际上并不存在。这通常是由服务器端的类似转义问题引起的,程序员打算将反斜杠发送给客户端,但实际上只是"在服务器上转义了反斜杠,导致仅"发送给客户端而不发送给客户端\"。
| 归档时间: |
|
| 查看次数: |
79 次 |
| 最近记录: |