我从上游得到低于字符串。无法控制它。
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似乎不起作用。我究竟做错了什么?
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'}
'
以获取您的对象这里有一个问题:单引号字符串文字不是有效的JSON。 JSON基于JavaScript,但它不是一回事。如果你在JavaScript代码中编写一个对象文字,那很好;如果你真的需要JSON,你需要使用“。
最简单的答案(对于非反"
狂热者):
{"text": "Airtel Tower (@ BT Tower in Chasdmzoa, Delhi)", "sentiment": "0.25"}
如果你不能忍受,或者不能使用(严格模式?),JSON.parse
,那么你需要将单引号转换为双引号进行解析,因为JSON只接受双引号:
eval