【问题标题】:Searching and editing nested JSON elements搜索和编辑嵌套的 JSON 元素
【发布时间】:2012-03-29 03:08:06
【问题描述】:

基本上,我希望能够在 Javascript(可选 JQuery)中搜索包含特定元素的嵌套元素的 JSON 并对其进行编辑。

例如。搜索 ID 为 110 的“组件”并将名称更改为“视频卡”。

请注意,以下 JSON 只是一个示例。我想知道是否存在 javascript 库或好的技巧来做这样的事情,我不认为遍历整个 json 或编写自己的方法是最好的解决方案。

{
   "computers": [
   {
     "id": 10,
     "components": [
         {
           "id": 56,
           "name": "processor"
         },
         {
           "id": 24,
           "name": "ram"
        }
      ]
    },
    {
      "id": 11,
      "components": [
        {
          "id": 110,
          "name": "graphic card"
        },
        {
          "id": 322,
          "name": "motherboard"
        }
      ]
    }
  ]
}

【问题讨论】:

  • 遍历对象是only选项。你在这里得到的所有答案都会以这样或那样的方式做到这一点。
  • 好的,但我相信已经存在库来做这样的事情,特别是不仅在 JSON 中搜索,而且还允许我实际编辑它。
  • 只是为了把它排除在外:当你搜索它时,它不再是 JSON;它只是一个对象图。
  • 所以基本上,您正在寻找一个库,该库与 jQuery 对 CSS 选择器所做的工作或 XPath 对 XML 文档所做的工作相当。您给出一条路径,它会将其与特定结构相匹配。不错的主意...
  • 没错,就算变成对象图我也得再转成JSON。

标签: javascript json search


【解决方案1】:

你可以试试linq.js

【讨论】:

  • 我在很大程度上使用了linq.js,虽然有点罗嗦,但效果很好!
【解决方案2】:

您可以使用这个 javascript 库 DefiantJS (http://defiantjs.com),您可以使用它在 JSON 结构上使用 XPath 过滤匹配项。放到JS代码里:

var data = {
       "computers": [
          {
             "id": 10,
             "components": [
                { "id": 56, "name": "processor" },
                { "id": 24, "name": "ram" }
             ]
          },
          {
             "id": 11,
             "components": [
                { "id": 110, "name": "graphic card" },
                { "id": 322, "name": "motherboard" }
             ]
          }
       ]
    },
    res = JSON.search( data, '//components[id=110]' );

res[0].name = 'video card';

这是一个工作小提琴;
http://jsfiddle.net/g8fZw/

DefiantJS 使用“search”方法扩展全局对象 JSON,并返回一个匹配的数组(如果没有找到匹配则为空数组)。您可以在此处使用 XPath Evaluator 试用 lib 和 XPath 查询:

http://www.defiantjs.com/#xpath_evaluator

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-04
    • 1970-01-01
    • 2020-11-29
    • 1970-01-01
    • 1970-01-01
    • 2018-05-06
    • 2020-11-21
    • 1970-01-01
    相关资源
    最近更新 更多