JSON.parse не создает объект json в JavaScript - PullRequest
0 голосов
/ 20 февраля 2019

Я получаю строку ниже по течению.У меня нет контроля над ним.

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

Я хочу изменить строку на JSON.Итак, первое, что я сделал, это удалил предшествующий b '....' (upstream - это программа на python, которая выдает строку utf-8 в качестве вывода).Поэтому я удаляю 'b', используя substr ..

str = msg.payload.substr(1);

Затем я пытаюсь преобразовать строку в JSON, используя JSON.stringify и JSON.parse ,

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 голосов
/ 20 февраля 2019

Здесь есть проблема: строковые литералы в одинарных кавычках не являются допустимыми JSON.JSON основан на JavaScript, но это не одно и то же.Если вы пишете литерал объекта внутри кода JavaScript, хорошо;если вам действительно нужен JSON, вам нужно использовать ".

0 голосов
/ 20 февраля 2019

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

Объяснение

  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 в предыдущей строке, чтобы ваш объект
0 голосов
/ 20 февраля 2019

Простейший ответ (для не-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, "\""));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...