1

次のようなjsonがあります

[{
    "name": "abc",
    "Path": "i.abc",
    "count": 5347,
    "subFolders": []
},
{
    "name": "cde",
    "Path": "i.cde",
    "count": 0,
    "subFolders": [{
        "name": "efg",
        "Path": "",
        "count": 0,
        "subFolders": []
    },
    {
        "name": "hij",
        "Path": "i.hij",
        "count": 1,
        "subFolders": []
    }]
}]

「パス」(一意の)値に基づいて「カウント」値を変更したい。たとえば、そのようにパス「i.hij」のカウントを2に変更したい。以下は私が試したコードです。

var json = "above json";
  for (i=0; i < json.length; i++) {
      this.updateJson(json[i], path, count);
  }

  updateJson: function(json, path, count) {

    if (json.path == path) {
        json.count = count;
        return json;
    } 

    if (json.subFolders != null && json.subFolders.length > 0) {

      for(j=0; j < json.subFolders.length; j++) {

          this.updateJson(json.subFolders[j], path, count);
      }
    }
  }

変更された値でjson全体を取得するにはどうすればよいですか?

4

1 に答える 1

1

あなたのコードにはいくつかの問題がPathありpathましvarfor.

固定関数は次のとおりです。

var obj = [{
    "name": "abc",
    "Path": "i.abc",
    "count": 5347,
    "subFolders": []
},
{
    "name": "cde",
    "Path": "i.cde",
    "count": 0,
    "subFolders": [{
        "name": "efg",
        "Path": "",
        "count": 0,
        "subFolders": []
    },
    {
        "name": "hij",
        "Path": "i.hij",
        "count": 1,
        "subFolders": []
    }]
}];

function upd(o, path, count) {
  if (o.Path == path) {
        o.count = count;
  } else {
    var arr;
    if (Array.isArray(o)) arr = o;
    else if (o.subFolders) arr = o.subFolders;
    else return;
    for(var j=0; j < arr.length; j++) {
        upd(arr[j], path, count);
    }
  }
}
upd(obj, "i.hij", 3);
console.log(obj);

ここには JSON がないため、JSON へのすべての参照を削除するように変数名も変更しました。

于 2013-10-10T06:16:51.263 に答える