Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JSON.parse不在javascript中创建JSON对象_Javascript_Json_Serialization - Fatal编程技术网

JSON.parse不在javascript中创建JSON对象

JSON.parse不在javascript中创建JSON对象,javascript,json,serialization,Javascript,Json,Serialization,我正从上游钻到绳子下面。无法控制它 b"{'text': 'Airtel Tower (@ BT Tower in Chasdmzoa, Delhi)', 'sentiment': '0.25'}" 我想将字符串更改为JSON。所以我做的第一件事就是删除前面的b'..(上游是一个python程序,它生成utf-8字符串作为输出)。因此,我使用substr删除“b” str = msg.payload.substr(1); 然后我尝试使用JSON.stringify和JSON.parse将字符

我正从上游钻到绳子下面。无法控制它

b"{'text': 'Airtel Tower (@ BT Tower in Chasdmzoa, Delhi)', 'sentiment': '0.25'}"
我想将字符串更改为JSON。所以我做的第一件事就是删除前面的b'..(上游是一个python程序,它生成utf-8字符串作为输出)。因此,我使用substr删除“b”

str = msg.payload.substr(1);
然后我尝试使用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);
控制台输出:

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

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

如果您无法忍受或无法使用(严格模式?)eval,则需要将单引号转换为双引号进行解析,因为JSON只接受双引号:

var string = msg.payload.substring(3,msg.payload.length-2);
var t = JSON.parse(string.replace(/'/g, "\""));

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

const input=“b'\”{'text':'Airtel Tower(@BT Tower in Chasdmzoa,德里)','commotation':'0.25'}\';
const cleanString=str=>str.split(“”)[1]。替换(/”/g“”);
控制台日志(输入);
//结果

console.log(JSON.parse(cleanString(input));
您还必须将
'
替换为
,因为JSON只支持双引号。您的
Airtel塔(德里Chasdmzoa的@BT塔)不是吗“
缺少一个单引号
开始时?我不知道投票结果是什么,因为有问题的数据本身是错误的。我在复制时错误地删除了缺少的单引号。现在更新@莫兰克这个解释很有帮助。
var string = msg.payload.substring(3,msg.payload.length-2);
var t = eval("(" + string + ")");
var string = msg.payload.substring(3,msg.payload.length-2);
var t = JSON.parse(string.replace(/'/g, "\""));