JSON.parse没有在javascript中创建json对象

问题描述 投票:1回答:3

我从上游得到低于字符串。无法控制它。

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似乎不起作用。我究竟做错了什么?

javascript json serialization
3个回答
1
投票

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)));

Explanation

  1. Split the string用双引号"作为分隔符
  2. 获取第二项。这将给你{'text': 'Airtel Tower (@ BT Tower in Chasdmzoa, Delhi)', 'sentiment': '0.25'}
  3. qazxsw poi单引号qazxsw poi用双引号qazxsw poi。这将给你Replace
  4. 在前一个字符串上调用'以获取您的对象

1
投票

这里有一个问题:单引号字符串文字不是有效的JSON。 JSON基于JavaScript,但它不是一回事。如果你在JavaScript代码中编写一个对象文字,那很好;如果你真的需要JSON,你需要使用“。


0
投票

最简单的答案(对于非反"狂热者):

{"text": "Airtel Tower (@ BT Tower in Chasdmzoa, Delhi)", "sentiment": "0.25"}

如果你不能忍受,或者不能使用(严格模式?),JSON.parse,那么你需要将单引号转换为双引号进行解析,因为JSON只接受双引号:

eval
© www.soinside.com 2019 - 2024. All rights reserved.