[英]JSON.parse not creating a json object in javascript
我从上游得到下面的字符串。 无法控制它。
b"{'text': 'Airtel Tower (@ BT Tower in Chasdmzoa, Delhi)', 'sentiment': '0.25'}"
我想将字符串更改为JSON。 所以我要做的第一件事是删除前面的b'....'(上游是一个生成utf-8字符串作为输出的python程序)。 所以我要用substr删除'b'。
str = msg.payload.substr(1);
然后,我尝试使用JSON.stringify和JSON.parse将字符串转换为JSON。
console.log(typeof(str));
var t = JSON.stringify(str);
console.log(typeof(t));
var t = JSON.parse(t);
console.log("First: " + t);
var t = JSON.parse(t);
console.log("Second " + t);
x = t.text;
y = t["text"];
console.log(x + " ---- " + y);
控制台输出:
string
string
First: "{'text': 'Airtel Tower(@ KT Tower in Bang, Greater K
n), 'sentiment': '0.25'}"
Second {'text': 'Vodafone Tower (@ LT Tower in Delhi, Greater K
), 'sentiment': '0.25'}
undefined ---- undefined
即使JSON.stringify删除了多余的引号等,它也无法将其转换为对象,并且JSON.parse似乎不起作用。 我究竟做错了什么?
这里有一个问题:单引号字符串文字不是有效的JSON。 JSON基于JavaScript,但这不是一回事。 如果要在JavaScript代码中编写对象文字,可以; 如果您确实需要JSON,则需要使用“。
const input = "b'\\"{'text': 'Airtel Tower (@ BT Tower in Chasdmzoa, Delhi)', 'sentiment': '0.25'}\\"'"; const cleanString = str => str.split('"')[1].replace(/'/g, '"'); console.log(input); // Result console.log(JSON.parse(cleanString(input)));
"
作为分隔符分割字符串 {'text': 'Airtel Tower (@ BT Tower in Chasdmzoa, Delhi)', 'sentiment': '0.25'}
"
替换 单引号 '
。这将为您提供{"text": "Airtel Tower (@ BT Tower in Chasdmzoa, Delhi)", "sentiment": "0.25"}
JSON.parse
以使您的对象 最简单的答案(非抗eval
-zealots):
var string = msg.payload.substring(3,msg.payload.length-2);
var t = eval("(" + string + ")");
如果您不能忍受或不能使用(严格模式?) eval
,则需要将单引号转换为双引号进行解析,因为JSON仅接受双引号:
var string = msg.payload.substring(3,msg.payload.length-2);
var t = JSON.parse(string.replace(/'/g, "\""));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.