【问题标题】:Get JSON child data获取 JSON 子数据
【发布时间】:2021-04-28 22:47:37
【问题描述】:

我正在尝试从我的 JSON 数据中获取 phone 并使用 D3。

[
{
    "id": "00000", 
    "type": "company", 
    "name": "Ideal-Phones", 
    "icon": "\uf1ad",
    "level" :"0",
    "display" : "block",
    "context": [
        {"context-id": "10000", "name": "phone"}
    ]
},
{
    "id": "00100",
    "type": "software",
    "name": "Jira",
    "icon": "\uf7b1",
    "parent" : "00000",
    "level" :"1",
    "display": "none",
    "context": [
        {"contxt-id": "10001", "name": "Jira"}
    ]
}

]

我可以通过以下方式获得level

function click(d) {
console.log(d.level)}

.. 并认为 console.log(d.context.name) 可以解决问题。

【问题讨论】:

  • context是一个数组,你需要d.context[0].name

标签: javascript json d3.js


【解决方案1】:

此代码将写入控制台所需的输出“电话”

var txt = '[{\"id\":\"00000\",\"type\":\"company\",\"name\":\"Ideal-Phones\",\"icon\":\"\uf1ad\",\"level\":\"0\",\"display\":\"block\",\"context\":[{\"context-id\":\"10000\",\"name\":\"phone\"}]},{\"id\":\"00100\",\"type\":\"software\",\"name\":\"Jira\",\"icon\":\"\uf7b1\",\"parent\":\"00000\",\"level\":\"1\",\"display\":\"none\",\"context\":[{\"contxt-id\":\"10001\",\"name\":\"Jira\"}]}]'
var obj = JSON.parse(txt);
alert(obj[0].context[0].name);

【讨论】:

    【解决方案2】:

    正如@Nick 的评论,context 的类型是一个数组。所以你应该通过index 访问它,如下所示

    var data = [
          {
              "id": "00000", 
              "type": "company", 
              "name": "Ideal-Phones", 
              "icon": "\uf1ad",
              "level" :"0",
              "display" : "block",
              "context": [
                  {"context-id": "10000", "name": "phone"}
              ]
          }
       ];
    var firstItem = data[0].context;
    console.log("Is array: " + Array.isArray(firstItem));
    
    var firstContext_of_firstItem = firstItem[0];
    console.log("Value: " + firstContext_of_firstItem.name);

    更多要求:循环比较属性的name

    var data = [
          {
              "id": "00000", 
              "type": "company", 
              "name": "Ideal-Phones", 
              "icon": "\uf1ad",
              "level" :"0",
              "display" : "block",
              "context": [
                  {"context-id": "10000", "name": "phone"},
                  {"context-id": "10001", "name": "Ideal-Phones"},
              ]
          }
       ];
       
    for(let item of data){
      var name_of_item = item.name;
      for(let childContext of item.context){
        var name_of_child_context = childContext.name;
        if(name_of_item === name_of_child_context){
          // do something here
          console.log(childContext);
        }
      }
    }

    【讨论】:

    • 谢谢@Mai,所以如果我想比较这些值,我需要遍历每个数组对吗?像“ForEach if d.context[i].name === o.context[i].name { do.. }
    • 用注释更新了我的答案更多要求:循环并比较属性的名称,请看一下@ICoded
    • 我明白了。谢谢@Mai,我会调整你的代码,以便比较不同的 JSON 对象。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-04
    • 2019-06-03
    • 1970-01-01
    • 2013-10-15
    • 2023-03-30
    • 1970-01-01
    相关资源
    最近更新 更多