我在看一个像这样的json
{
"key": "cow",
"value": "woof"
}
{
"key": "dog",
"value": "moo"
}我想解析它,但是JSON.parse不能工作,因为它作为一个整体并不是真正的json。实际上也没有新行,所以看起来
{"key": "cow","value": "woof"}{"key": "dog","value": "moo"}至于原因,这是来自彗星端点的流。理想情况下,它应该一个接一个地出现,但有时会有一个中断,当它回来后,我会收到自中断发生以来发生的所有更改的列表,并将其串在一起。所以,如果在连接中断的时候,三条断条注定会掉下来,那么我将在最后一次把它们全部拿出来:
{"key": "cow","value": "woof"}{"key": "dog","value": "moo"}{"key":"cat","value":"baaa"}有什么方便的方法在浏览器中解析这种json吗?
编辑:对不起,伙计们,我没有提到对象可以任意嵌套,并且可以包含各种各样的东西,Unicode字符、数组、对象、带有对象的数组、各种形状和大小的大括号等等,所以在这种情况下,大多数hacky字符串拆分或regex解决方案都会失败。我没有把这些都放在例子中,因为我太懒了,但更有代表性的例子可能是
{
"key": "cow",
"value": {
"body": "big",
"name": "sally",
"children": [
"bob",
"daisy"
]
},
"alt-key": "牛"
}
{
"key": "dog",
"value": "moo{}{}{}}}} i love brackets[[[]] ]]]] }{}",
"array": [
"豆沙包",
"叉烧包"
]
}尽管正则/字符串拆分在95%的情况下都能工作,但我正在寻找一个严格正确的解决方案,在正确的json中始终有效。
发布于 2012-07-10 18:09:26
如果是我,我只需要编写一个JSON解析器,它可以理解JSON表达式流。JSON就像语法一样容易解析,使一个能够为一个新句子“重置”自己的解析器非常简单(一旦解析器存在)。
见鬼,您可以从json.org解析器本身开始。
要可靠地“修复”当前数据,不管怎么说,它都是一个非常接近于编写解析器的项目。
发布于 2012-07-10 16:36:28
如果值和键不包含}{,您可以简单地添加逗号使其成为有效的JSON (并添加方括号使其成为数组):
var json = '[' + json.replace(/}{/g, '},{') + ']';如果您只得到一个作为响应的对象,这甚至是可行的。
发布于 2012-07-10 16:37:09
就像这样:
var arrayOfObjects = flowstring.match(/{.*?}/g).map(function(value){
return JSON.parse(value);
});您将拥有以下对象数组:
[{"key": "cow","value": "woof"},{"key": "dog","value": "moo"}.......]https://stackoverflow.com/questions/11417817
复制相似问题