Я хочу получить одну конкретную запись из массива данных JSON и внести некоторые изменения - PullRequest
3 голосов
/ 07 декабря 2010

сначала я получил данные JSON через веб-сервер, как

$.getJSON(url,function(){
//my callback function;
});

И теперь у меня есть данные следующим образом:

{entries:[{title:'foo',id:'UUID',finished:null},{title:'bar',id:'UUID',finished:null},{title:'baz',id:'UUID',finished:null}]}

Мне нужно найти одну конкретную запись JSON:это UUID, и после этого мне нужно, например, изменить одну часть, создать новые данные json:

{title:'foo',id:'UUID',finished:true}

и отправить обратно на сервер, используя

$.post(url, data);

Я полностьюпотерял себя в этой ситуации ... кто-нибудь может помочь?

Ответы [ 3 ]

6 голосов
/ 07 декабря 2010

Предполагая, что вы поместили данные в переменную с именем result, например:

var result = {entries:[{title:'foo',id:'UUID',finished:null},{title:'bar',id:'UUID',finished:null},{title:'baz',id:'UUID',finished:null}]}

Вы можете сделать цикл for:

for ( var i=0; i<result.entries.length; i++ ) {
  if (result.entries[i].id == 'the_UUID_you_are_looking_for') {
    var entry = result.entries[i]; // "entry" is now the entry you were looking for
    // ... do something useful with "entry" here...
  }
}

Edit - я написал полное решение ниже, чтобы проиллюстрировать идею и избежать недоразумений:

// Get data from the server
$.getJSON("url", function(result) {

  // Loop through the data returned by the server to find the UUId of interest
  for ( var i=0; i<result.entries.length; i++ ) {
    if (result.entries[i].id == 'the_UUID_you_are_looking_for') {
      var entry = result.entries[i];


      // Modifiy the entry as you wish here.
      // The question only mentioned setting "finished" to true, so that's
      // what I'm doing, but you can change it in any way you want to.
      entry.finished = true;


      // Post the modified data back to the server and break the loop
      $.post("url", result);
      break;
    }
  }
}
1 голос
/ 07 декабря 2010

Попробуйте это:

var modified = false, myUuid = 'some uuid';

for (i = 0; i < data.entries.length; i++) {
    if (data.entries[i].id === myUuid) {
        data.entries[i].finished = true;
        modified = true;
        break;
    }
}

if (modified) {
    $.post(url, data);
}
0 голосов
/ 07 декабря 2010

Вам нужно перебрать ваши данные. В качестве альтернативы вы можете реструктурировать свой JSON:

{"entries":{"UUID1":{"title":"foo", "finished": false }}, {"UUID2":{"title":"bar", "finished":false}}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...