如何读取包含多个根元素的JSON文件
How to read a JSON file containing multiple root elements?
如果我有一个文件的内容看起来像:
{"one": 1}
{"two": 2}
我可以简单地将每个单独的行解析为一个单独的JSON对象(使用JsonCpp)。但是,如果文件的结构不那么方便呢
{
"one":1
}
{
"two":2
}
没有人提到数组:
[
{"one": 1},
{"two": 2}
]
是有效的JSON,可以执行OP想要的操作。
问题中的两个示例都不是有效的JSON对象;JSON对象可能只有一个根。您必须将文件拆分为两个对象,然后对它们进行解析。
您可以使用http://jsonlint.com查看给定字符串是否为有效的JSON。
因此,我建议要么改变将多个JSON对象转储到单个文件中的方式,将其放在单独的文件中,要么将每个对象作为一个值放在一个JSON根对象中。
如果您无法控制创建这些文件的内容,那么您就只能自己解析文件来挑选不同的根对象。
以下是在JSON对象中编码这些数据的有效方法:
{
"one": 1,
"two": 2
}
如果你真的需要单独的对象,你可以这样做:
{
"one":
{
"number": 1
},
"two":
{
"number": 2
}
}
您可以通过编程在收到的JSON周围添加一对方括号,并绕过"伪根";节点。
但您不必手动执行此操作。有一种叫做JSON Line的东西你可能会感兴趣。
即使您有复杂的对象,您也可以使用此自定义函数来解析多个根元素。
static getParsedJson(jsonString) {
const parsedJsonArr = [];
let tempStr = '';
let isObjStartFound = false;
for (let i = 0; i < jsonString.length; i += 1) {
if (isObjStartFound) {
tempStr += jsonString[i];
if (jsonString[i] === '}') {
try {
const obj = JSON.parse(tempStr);
parsedJsonArr.push(obj);
tempStr = '';
isObjStartFound = false;
} catch (err) {
// console.log("not a valid JSON object");
}
}
}
if (!isObjStartFound && jsonString[i] === '{') {
tempStr += jsonString[i];
isObjStartFound = true;
}
}
return parsedJsonArr;
}
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 使用strcpy将char数组的元素复制到另一个数组
- 在c++中使用nlohmann从类到json的转换
- 使用不带参数的函数访问结构元素
- 给定n个元素的m个集合.在C++中找到出现在最大集合数中的元素
- C++如何通过用户输入删除列表元素
- lower_bound()返回最后一个元素
- 基于多个条件处理地图中的所有元素
- 调整大小后指向元素值的指针unordered_map有效?
- JSONCPP 只用一个元素写入 JSON 数组
- 如何使用 boost 属性树来解析 boost 中 json 字符串中的数组中的元素?
- 对于Boost.Propertytree,有没有办法使用JSON点表示法来引用数组元素?
- 如何使用Qt访问JSON元素
- 带有无效元素的JSON
- 如何读取包含多个根元素的JSON文件
- 使用 boost 解析 json 文件中数组中的元素
- 如何完全删除json数组元素(使用jsoncpp)
- 如何使用json11库在json中添加子/嵌套元素
- 访问nlohmann json中的元素