浏览JSON对象图的建议

质疑

我正在寻找解析JSON树的替代方法。给出以下示例:

{
  "firstName": "John",
  "lastName" : "doe",
  "age"      : 26,
  "address"  : {
    "streetAddress": "naist street",
    "city"         : "Nara",
    "postalCode"   : "630-0192"
  }
}

如果我试图访问分支,如address.streetAddressaddress.city然后我可以看到获得该值的方法有两种:

1)上面列出的查询的JSON路径

2)手动将查询拆分为“分支”(主分支地址,子分支streetAddress),然后以这种方式检查对象键。


有更好的方法吗?更好的是,我指的是高效的代码,不一定是“干净的”代码。

所述代码的应用将是在NGRX metareducer中使用此代码来自动将对象保存到本地存储,因此它可能会经常评估一棵大树。

谢谢。


经过各种方法的测试后,我最终选择了_ug的答案。

下面的数据,以及我使用的脚本要点(没有数据,这是敏感的)。我在4个查询中对每个函数运行了100万次。

Executing test: empty test
Average time for 1,000,000 executions: 6.181699991226196 milliseconds.

Executing test: split and reduce
Average time for 1,000,000 executions: 429.71359902620316 milliseconds.

Executing test: lodash
Average time for 1,000,000 executions: 1091.8809990286827 milliseconds.

Executing test: json path
Average time for 1,000,000 executions: 32114.680999994278 milliseconds.
ug_

巧合的是为此写了一些东西,它不适用于数组,但是非常简单。

let obj = {
  "firstName": "John",
  "lastName" : "doe",
  "age"      : 26,
  "address"  : {
    "streetAddress": "naist street",
    "city"         : "Nara",
    "postalCode"   : "630-0192"
  }
}

function jsonPath(path, obj) {
  return path.split('.').reduce((o, p) => o[p], obj);
}

console.log(jsonPath('address.streetAddress', obj));
console.log(jsonPath('address.city', obj));

您也可以通过将split更改为括号来使其适应于数组运行 split(/[\[\.\]]+/)

您也可以通过将reduce更改为,使它返回未定义状态,而不是在找不到路径值时抛出错误。 reduce((o, p) => o && o[p], obj)

结果将是:

let obj = {
  "firstName": "John",
  "lastName" : "doe",
  "age"      : 26,
  "addresses"  : [{
    "streetAddress": "naist street",
    "city"         : "Nara",
    "postalCode"   : "630-0192"
  }]
}

function jsonPath(path, obj) {
  return path.split(/[\[\.\]]+/).reduce((o, p) => o && o[p], obj);
}

console.log(jsonPath('addresses[0].streetAddress', obj));
console.log(jsonPath('addresses[0].city', obj));
console.log(jsonPath('addresses[2].city', obj));

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

相似对象图的json模式

来自分类Dev

FluentAssertions对象图比较,包括JSON对象

来自分类Dev

在C#中浏览动态对象(json)

来自分类Dev

为每个Json对象创建饼图

来自分类Dev

如何从浏览器下载json对象作为文件

来自分类Dev

如何从浏览器下载json对象作为文件

来自分类Dev

d3区域图,使用JSON对象

来自分类Dev

d3区域图,使用JSON对象

来自分类Dev

DialogFlow 建议芯片 - Web 浏览器不提供建议

来自分类Dev

终端自动完成:循环浏览建议

来自分类Dev

是否建议删除Avahi和CUPS浏览?

来自分类Dev

谁能建议我如何在Java中计算某些JSON数据对象的百分比?

来自分类Dev

Android Json解析建议

来自分类Dev

浏览对象的字段

来自分类Dev

浏览JS对象

来自分类Dev

Java浏览对象队列

来自分类Dev

遍历对象图

来自分类Dev

角度-创建对象图

来自分类Dev

漂亮地打印在Ruby中创建的JSON对象到Chrome浏览器控制台

来自分类Dev

如何在ASP.Net Core中将大型json对象流式传输到浏览器

来自分类Dev

TF.js在浏览器中以model.json格式加载对象检测模型

来自分类Dev

如何使用ruby控制器在浏览器控制台中打印JSON对象?

来自分类Dev

循环浏览没有箭头的自动完成建议

来自分类Dev

建议的Google Chrome浏览器扩展程序图标大小

来自分类Dev

禁用通过'&'和')'滚动浏览Ajax.Autocompleter建议列表

来自分类Dev

PHP显示Cookie并在浏览器中删除建议

来自分类Dev

键入时,谷歌浏览器中建议地址后的“ /”

来自分类Dev

寻找JavaScript设计建议-使用Ajax滚动浏览几天

来自分类Dev

是否建议在Session中保存对象?