【问题标题】:Find and update all the keys value in a nested JSON Arrays and Objects using Javascript使用 Javascript 查找和更新嵌套 JSON 数组和对象中的所有键值
【发布时间】:2016-07-27 17:50:09
【问题描述】:

我有下面嵌套的数组和对象的 JSON 数据

我需要在 javascript 或 NodeJS 或 AngularJS 中将字符串中的所有键值从英文更新为西班牙文

    {
      "firstrootkey" : [ //Array of 6 objects 
      {  //1st object
        "key1" : "valueinstring",
        "key2" : randomnumbers
      },..... ],
      "secondrootkey" : { //having 7 objects 
        "One" : [ { //each object having array of n objects 
          "name" : "valueinstring",
          "id" : randomnumbers
        }, ......],
        "two two" : [ { // array of m objects
          "keya" : "valueinstring",
          "keyb" : randomnumbers
        },.......],
      .
      .
      .

      },
      "third root key" : { //having n objects 
        "sdfdsfsfs" : [ { //each object having array of n objects
          "keyc" : "valueinstring",
          "keyhuh" : 858556
          "hgjhgj" : 6789
        },.... ],
        .
        .
        .
        .
        .
        }
    }

我尝试了很多方法,但都没有奏效...
一种方法

   for (var rootKey in jsonEnglish) {
    var rootValue = jsonEnglish[rootKey];
      if (rootValue.isArray) { // function iterate Array objects         
        //loop each array
          // if every array is object -- function iterate object 
            // find value in object 
              //if value not array and object 
                 // then pass value to translator 
                  //and update the value with translated value
              //else if its object
                  //      

给出一些接近的方向

【问题讨论】:

  • 你的方法在什么方面不起作用?对我来说这听起来很有希望。
  • @Shan418,请添加您的代码的 Fiddle/Plnkr。
  • 您似乎不知道对象的深度。也许一些recursion 会帮助你。
  • 是的,我不知道 JSON 结构和深度。它因 URI 而异。我也会尝试递归。

标签: javascript angularjs json node.js nested


【解决方案1】:

好的,首先在此处验证您的 JSON http://jsonlint.com/

然后在 javascript 中你可以访问 json 并将其与 XMLHttpRequest() 一起使用

var xmlhttp = new XMLHttpRequest();
        var url = "yourdata.json";

        xmlhttp.onreadystatechange = function() {
            if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                var json_array = JSON.parse(xmlhttp.responseText);                    
                parseJson(json_array);
        }

    xmlhttp.open("GET", url, true);
    xmlhttp.send();

    json_data += "<p>Variable Access through array structure: " + json_array.firstrootkey[0].key1+ "</p>";
    json_data += "<p>Access Array inside array item: " + json_array.secondrootkey[0].one[0].name + "</p>";

    document.getElementById("display_json").innerHTML = json_data;

此外,第 7 行存在语法错误。此外,要测试您的代码,您需要一个正常工作的 Web 服务器。我更喜欢 appserv。

这是一些正确的 JSON,并在 JSONlint.com 上得到验证

{
    "firstrootkey": [{
    "firstName": "Shane",
    "lastName": "Burton",
    "id": [
        1, 2, 3, 4, 5, 6, 7, 8
    ],
    "credits": "24"
}],
"secondrootkey": [{
    "One": [{
        "firstName": "Shane",
        "lastName": "Burton",
        "id": [
            1, 2, 3, 4, 5, 6, 7, 8
        ],
        "credits": "24"
    }]
}]
}

第二个 JSON OBJECT 每组括号代表数据库/列表中的一行

由于您使用的是 foreach 循环,为了简单起见,我会将其设为一个对象。

{
"foreachloopobject": [{
    "firstrootkey": [{
        "firstName": "Shane",
        "lastName": "Burton",
        "id": [
            1, 2, 3, 4, 5, 6, 7, 8
        ],
        "credits": "24"
    }],
    "secondrootkey": [{
        "One": [{
            "firstName": "Shane",
            "lastName": "Burton",
            "id": [
                1, 2, 3, 4, 5, 6, 7, 8
            ],
            "credits": "24"
        }]
    }],
    "firstrootkey": [{
        "firstName": "Shane",
        "lastName": "Burton",
        "id": [
            1, 2, 3, 4, 5, 6, 7, 8
        ],
        "credits": "24"
    }],
    "secondrootkey": [{
        "One": [{
            "firstName": "Shane",
            "lastName": "Burton",
            "id": [
                1, 2, 3, 4, 5, 6, 7, 8
            ],
            "credits": "24"
        }]
    }]
}]
}

【讨论】:

  • 我的 JSON 数据中的点表示数组或对象的出现
  • 我不能在代码中使用任何硬编码值,例如 json_array.secondrootkey[0].one[0].name。
  • 不是点,而是你使用 { 而不是 [。第7行没有点?只要确保在 jsonlint 中测试它。它会告诉你语法是否正确。从你向我展示的情况来看,Json 是行不通的。我将编辑我的答案以获得一些 json。
  • 你从哪里提取数据?你能用 JSONlint.com 验证它吗?示例buttraxx.com/json_get_data.php 这里我从 mysql 服务器中提取数据并创建一个 json 对象。不必硬编码,只需要获取对象即可。
猜你喜欢
  • 2017-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-02
  • 2021-02-12
  • 2021-11-27
  • 1970-01-01
  • 2020-12-20
相关资源
最近更新 更多