如何在浏览器中解析连接的JSON字符串
How To Parse A String Of Concatenated JSON In Browser?
我正在使用Socket.IO将数据移动到浏览器。发送的数据是一个JSON对象流,当它到达浏览器时,它就变成了一个大的JSON字符串。问题是,这个JSON不能被JSON.parse()解析,因为它不是"真正的"JSON。
数据结构可以是任意的,因此RegEx可能无法做到这一点。目前的设置只是暂时的。最终,这个JSON流将在服务器端进行预处理,因此流不需要发送到浏览器,所以我想保留我现在拥有的AJAX/Socket.IO设置,而不是切换到像OboeJS这样的JSON流解析器。
我可以做些什么来解析这个串联的JSON字符串?
为了清晰起见,JSON将如下所示:
{"a":"A"}{"b":"B"}{"c":"C"}
我正试图以这样一种方式解析它,我可以访问它们,比如:
console.log(Object.a) //A
console.log(Object.b) //B
console.log(Object.c) //C
在您的特定情况下,您可以使用Array.prototype.reduce
将所有JSON对象合并为一个:
var unstructuredJson = '{"a":"A"}{"b":"B"}{"c":"C"}';
var jsonArray = "[" + unstructuredJson.split("}{").join("},{") + "]";
var objectArray = JSON.parse(jsonArray);
var result = objectArray.reduce(function(result, item) {
Object.keys(item).forEach(function(propertyName) {
result[propertyName] = item[propertyName];
});
return result;
}, {});
document.body.textContent = JSON.stringify(result);
OP在一些评论中说:
[…]每个JSON可能都有嵌套的数据,如{{}
然后,上述方法在这种情况下被打破。
我的两点是,当你流式传输这些JSON对象时,你应该放一些分隔符,这样生活会更容易:你可以很容易地拆分父对象,你只需要用整个分隔符更改split("}{")
。
我建议你使用一些永远不会发生的字符作为任何财产价值的一部分。你可以在这篇维基百科文章中找到一个控制字符:控制字符
如果每个子字符串都是有效的JSON,但连接的部分不是,则可以将字符串转换为有效的数组文字并使用JSON。parse,然后可以使用array方法处理每个对象,例如forEach:
var s = '{"a":"A"}{"b":"B"}{"c":"C"}';
var obj = JSON.parse('[' + s.replace(/}{/g,'},{') + ']').forEach(function (obj) {
document.write(JSON.stringify(obj) + '<br>');
});
或者,如果你想把它作为一个单一的对象:
var s = '{"a":"A"}{"b":"B"}{"c":"C"}';
var obj = JSON.parse(s.replace(/}{/g,','));
document.write(JSON.stringify(obj));
您可以使用JsonParser来解析连接的json对象:
ObjectMapper mapper = new ObjectMapper();
JsonFactory factory = new JsonFactory(mapper);
JsonParser parser = factory.createParser(YourJsonString);
List<YourObject> YourObjectList = new ArrayList<>();
Iterator<YourObject> iterator = parser.readValuesAs(YourObject.class);
while(iterator.hasNext()) {
YourObject yourObject = iterator.next();
loginSignalsList.add(yourObject);
}
拆分大字符串{a:'A'}{b:'B'}{c:'C'}
并分别对其进行
- Tabrisjs无法建立连接包.json文件
- Javascript/webpack:如何用自定义的文件循环连接目录中的所有json文件
- '对象不是函数'当使用angular连接两个json数组时
- 如何在浏览器中解析连接的JSON字符串
- 通过字段名连接Javascript中的JSON
- 在不使用jQuery的情况下连接两个JSON对象
- 当连接在一起时,如何使用两个部分构建 JSON 对象,生成正确的 JSON 数据路径
- 尝试从“平面”JSON连接D3节点以制作公司层次结构图
- JSON 数据已将字段名称连接成值字段 (Django)
- 将两个 JSON 对象与数组对象连接起来
- Internet Explorer没有't通过Ajax连接JSON
- 与JQueryMobile中基于REST的JSON WebService的连接
- AJAX只能在本地连接,而不能在服务器端使用JSON
- 连接两个json文件
- 如何在节点.js中使用重新连接模块设置 json 值
- 在javascript中连接JSON对象中的JSON数组
- 如何在AngularJS中连接并放入JSON而不是mongolab
- 用回调连接JSON对象并导出结果
- 用Grunt连接JSON文件的合适方法
- SQL右连接JSON/数组