JSON.parse 未在 javascript 中创建 json 对象

Kos*_*hur 2 javascript serialization json

我从上游得到下面的字符串。无法控制它。

b"{'text': 'Airtel Tower (@ BT Tower in Chasdmzoa, Delhi)', 'sentiment': '0.25'}"
Run Code Online (Sandbox Code Playgroud)

我想将字符串更改为 JSON。所以我做的第一件事就是删除前面的 b'....' (上游是一个生成 utf-8 字符串作为输出的 python 程序)。所以我使用 substr 删除 'b'..

str = msg.payload.substr(1);
Run Code Online (Sandbox Code Playgroud)

然后我尝试使用JSON.stringifyJSON.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);
Run Code Online (Sandbox Code Playgroud)

控制台输出:

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
Run Code Online (Sandbox Code Playgroud)

即使JSON.stringify删除了额外的引号等,并且JSON.parse似乎不起作用,它也无法将其转换为对象。我究竟做错了什么?

mol*_*amk 5

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)));
Run Code Online (Sandbox Code Playgroud)

解释

  1. 使用双引号 "作为分隔符分割字符串
  2. 获取第二项。这会给你{'text': 'Airtel Tower (@ BT Tower in Chasdmzoa, Delhi)', 'sentiment': '0.25'}
  3. 将单引号 替换'双引号 "。这会给你{"text": "Airtel Tower (@ BT Tower in Chasdmzoa, Delhi)", "sentiment": "0.25"}
  4. 调用JSON.parse前一个字符串来获取您的对象