revise deeply nested JSON array in DOM

爱⌒轻易说出口 提交于 2021-01-29 12:21:51

问题


I have an HTML page that contains a stringified JSON object. The object has this structure:

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

I want to replace this object with one in which the "items" array has been sorted. Here is what I will and won't know about the object:

  • "myKey" and "items" will always be the relevant object keys
  • "myKey" will contain only one random ID, and the "items" key will always be its first child
  • I won't know the order of "myKey" in the object.
  • I won't know the true randomID under which "items" nests.

Is there a clear, efficient way to replace this JSON object with one in which "items" has been sorted? Right now, I do it by using this jQuery function after the page has rendered:

  $(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;
  });  

This approach works, but it seems rather labored. It might be better, for example, if I could revise the JSON object "in place" without parsing it and then re-stringifying it.

Many SO posts, like this one, speak to the general question of how to sort a JSON array. But I can't see that any speak to the specific question posed here.

来源:https://stackoverflow.com/questions/61704340/revise-deeply-nested-json-array-in-dom

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!