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

时间:2019-02-20 11:02:27

标签: javascript json serialization

我正在从上游进入弦下。无法控制它。

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

3 个答案:

答案 0 :(得分:1)

这里有一个问题:单引号字符串文字不是有效的JSON。 JSON基于JavaScript,但这不是一回事。如果要在JavaScript代码中编写对象文字,可以;如果您确实需要JSON,则需要使用“。

答案 1 :(得分:1)

apiVersion: v1
kind: Service
metadata:
  name: node
  labels:
    app: node
    tier: backend
spec:
  type: LoadBalancer
  ports:
    - port: 3000
      nodePort: 30005

说明

  1. Split the string,以双引号 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)));作为分隔符
  2. 获取第二项。这将给您"
  3. Replace 单引号 {'text': 'Airtel Tower (@ BT Tower in Chasdmzoa, Delhi)', 'sentiment': '0.25'}双引号 '。这将给您"
  4. 在上一个字符串上调用JSON.parse以获取对象

答案 2 :(得分:0)

最简单的答案(针对非反eval狂热分子):

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, "\""));