在DOM中修改深度嵌套的JSON数组

时间:2020-05-09 22:01:14

标签: javascript jquery json dom selectize.js

我有一个HTML页面,其中包含一个字符串化的JSON对象。该对象具有以下结构:

{
  "x":{
    "key1":[],
    "key2":{},
    "keyN":{},
    "myKey":{
      "randomID238492":{
        "items":[
          { "value":"zzzz" },
          { "value":"aaaa" },
          { ...}
        ]
      }
    }
  }
}

我想将此对象替换为已对“项目”数组进行排序的对象。这是我将要知道的关于物体的东西:

  • “ myKey”和“ items”将始终是相关的对象键
  • “ myKey”将仅包含一个随机ID,“ items”密钥将始终是其第一个子对象
  • 我将不知道对象中“ myKey”的顺序。
  • 我不知道嵌套“项目”的真正的randomID。

是否存在一种清晰,有效的方法来将JSON对象替换为已对“项目”进行排序的对象?现在,我在页面呈现后通过使用以下jQuery函数来做到这一点:

  $(function() {

    var myData  = $( "#myJSON_string" )[0];         // <script> node that contains the string
    var myDataJSON = JSON.parse(myData.innerText);  // JSON string
    var myKeyJSON = myDataJSON["x"]["myKey"];       // object
    var myArr = myKeyJSON[Object.keys(myKeyJSON)[0]]["items"];  // array to sort

    // Now sort and revise. I'm leaving myCompare() out of the example for brevity
    myKeyJSON[Object.keys(myKeyJSON)[0]]["items"] = myArr.sort(myCompare);
    myDataJSON["x"]["myKey"] = myKeyJSON;
    myDataJSON = JSON.stringify(myDataJSON);
    myData.innerText = myDataJSON;
  });  

此方法有效,但似乎相当费力。例如,如果我可以在不解析的情况下修改“就地” JSON对象,然后重新对其进行字符串化,则可能会更好。

许多SO帖子,例如this one,都谈到了有关如何对JSON数组进行排序的一般问题。但是我看不到有人在这里提出具体问题。

0 个答案:

没有答案