如何解析json数组并得到预期的结果?

时间:2014-05-15 19:13:59

标签: javascript jquery arrays json

我正在解析json。我正在检查json数组,然后创建另一个对象。我只是在一个地方敲击。实际上我正在检查如果父有子,我在" testCaseList&#34中添加一个对象;针对孩子的数组。但我需要检查子ID是否有字符"不是"它应该添加到这个数组" commandList" http://jsfiddle.net/tJ7Kq/5/ 这是我的意见。

[
  {
    "id": "a",
    "text": "a",
    "icon": true,
    "li_attr": {
      "id": "a"
    },
    "a_attr": {
      "href": "#"
    },
    "state": {
      "loaded": true,
      "opened": false,
      "selected": false,
      "disabled": false
    },
    "data": {

    },
    "children": [

    ]
  },
  {
    "id": "b",
    "text": "b\n            ",
    "icon": true,
    "li_attr": {
      "id": "b"
    },
    "a_attr": {
      "href": "#"
    },
    "state": {
      "loaded": true,
      "opened": false,
      "selected": false,
      "disabled": false
    },
    "data": {

    },
    "children": [
      {
        "id": "b-a-1",
        "text": "b-a",
        "icon": true,
        "li_attr": {
          "id": "b-a-1"
        },
        "a_attr": {
          "href": "#"
        },
        "state": {
          "loaded": true,
          "opened": false,
          "selected": false,
          "disabled": false
        },
        "data": {

        },
        "children": [

        ]
      },
      {
        "id": "b-b-2",
        "text": "b-b\n                    ",
        "icon": true,
        "li_attr": {
          "id": "b-b-2"
        },
        "a_attr": {
          "href": "#"
        },
        "state": {
          "loaded": true,
          "opened": false,
          "selected": false,
          "disabled": false
        },
        "data": {

        },
        "children": [
          {
            "id": "b-b-a",
            "text": "b-b-a",
            "icon": true,
            "li_attr": {
              "id": "b-b-a"
            },
            "a_attr": {
              "href": "#"
            },
            "state": {
              "loaded": true,
              "opened": false,
              "selected": false,
              "disabled": false
            },
            "data": {

            },
            "children": [

            ]
          },
          {
            "id": "b-b-b",
            "text": "b-b-b",
            "icon": true,
            "li_attr": {
              "id": "b-b-b"
            },
            "a_attr": {
              "href": "#"
            },
            "state": {
              "loaded": true,
              "opened": false,
              "selected": false,
              "disabled": false
            },
            "data": {

            },
            "children": [

            ]
          }
        ]
      }
    ]
  },
  {
    "id": "c-1",
    "text": "c\n            ",
    "icon": true,
    "li_attr": {
      "id": "c-1"
    },
    "a_attr": {
      "href": "#"
    },
    "state": {
      "loaded": true,
      "opened": false,
      "selected": false,
      "disabled": false
    },
    "data": {

    },
    "children": [
      {
        "id": "not-c-a-1",
        "text": "c-a",
        "icon": true,
        "li_attr": {
          "id": "not-c-a-1"
        },
        "a_attr": {
          "href": "#"
        },
        "state": {
          "loaded": true,
          "opened": false,
          "selected": false,
          "disabled": false
        },
        "data": {

        },
        "children": [

        ]
      },
      {
        "id": "not-c-b-2",
        "text": "b-b",
        "icon": true,
        "li_attr": {
          "id": "not-c-b-2"
        },
        "a_attr": {
          "href": "#"
        },
        "state": {
          "loaded": true,
          "opened": false,
          "selected": false,
          "disabled": false
        },
        "data": {

        },
        "children": [

        ]
      }
    ]
  }
]

退出这个

[
  {
    "a": {
      "commandList": [],
      "testCaseList": []
    }
  },
  {
    "b": {
      "commandList": [],
      "testCaseList": [
        {
          "b-a-1": {
            "commandList": [],
            "testCaseList": []
          }
        },
        {
          "b-b-2": {
            "commandList": [],
            "testCaseList": [
              {
                "b-b-a": {
                  "commandList": [],
                  "testCaseList": []
                }
              },
              {
                "b-b-b": {
                  "commandList": [],
                  "testCaseList": []
                }
              }
            ]
          }
        }
      ]
    }
  },
  {
    "c-1": {
      "commandList": [],
      "testCaseList": [
        {
          "not-c-a-1": {
            "commandList": [],
            "testCaseList": []
          }
        },
        {
          "not-c-b-2": {
            "commandList": [],
            "testCaseList": []
          }
        }
      ]
    }
  }
]

预期出局是:    [

      {
        "a": {
          "commandList": [],
          "testCaseList": []
        }
      },
      {
        "b": {
          "commandList": [],
          "testCaseList": [
            {
              "b-a-1": {
                "commandList": [],
                "testCaseList": []
              }
            },
            {
              "b-b-2": {
                "commandList": [],
                "testCaseList": [
                  {
                    "b-b-a": {
                      "commandList": [],
                      "testCaseList": []
                    }
                  },
                  {
                    "b-b-b": {
                      "commandList": [],
                      "testCaseList": []
                    }
                  }
                ]
              }
            }
          ]
        }
      },
      {
        "c-1": {
          "commandList": [
 {
              "not-c-a-1": {
                "commandList": [],
                "testCaseList": []
              }
            },
            {
              "not-c-b-2": {
                "commandList": [],
                "testCaseList": []
              }
            }],
          "testCaseList": []
        }
      }
    ]

1 个答案:

答案 0 :(得分:0)

此mapItem函数将执行您所需的操作:

function mapItem(inputItem) {
    var item = {};
    item[inputItem.id] = JSON.parse(sessionStorage.getItem(inputItem.id));

    for (k in inputItem.children) {
        if (/^not-/.test(inputItem.children[k].id)) {
            item[inputItem.id].commandList.push(mapItem(inputItem.children[k]));
        }else{
            item[inputItem.id].testCaseList.push(mapItem(inputItem.children[k]));  
        }
    }

    return item;
}