Как добавить элемент JSON, имя которого уже существует в качестве другого атрибута? - PullRequest
2 голосов
/ 24 мая 2011

Я пытаюсь создать это:

var a = {
"requestM" : {
    "task" : "list",
    "listRequest" : {
        "checkedEntryType" : "GLOBAL",
        "targetList" : {
            "maxResult" : "2",
            "status" : "OPEN",
            "entryType" : "CALL"
        },
        "targetList" : {
            "maxResult" : "3",
            "status" : "CLOSED",
            "entryType" : "CALL"
        },
        "targetList" : {
            "maxResult" : "2",
            "status" : "OPEN",
            "entryType" : "TODO"
        },
        "targetList" : {
            "maxResult" : "2",
            "status" : "CLOSED",
            "entryType" : "TODO"
        }
    }
}

}

targetList не вложен в массив, но повторяется. Теперь я пытаюсь создать сообщение так:

var reqJson = {
        "requestM" : {
            "task" : "list",
            "listRequest" : {
                "checkedEntryType" : checkedEntryType
            }
        }
    };

    reqJson.requestM.listRequest.targetList={
        "maxResult" : 10,
        "status" : "OPEN",
        "entryType" : "CALL"
    };
    reqJson.requestM.listRequest.targetList={
        "maxResult" : 10,
        "status" : "OPEN",
        "entryType" : "TODO"
    };

Однако второй targetList заменит первый. Как этого избежать? Спасибо!

Ответы [ 2 ]

3 голосов
/ 24 мая 2011

Ключ должен быть уникальным для объекта.Сделайте его значение массивом.После преобразования объектов из JSON в JavaScript вы можете вставить данные в него.

"listRequest" : {
    "checkedEntryType" : "GLOBAL",
    "targetList" : [
    {
        "maxResult" : "2",
        "status" : "OPEN",
        "entryType" : "CALL"
    },
    {
        "maxResult" : "3",
        "status" : "CLOSED",
        "entryType" : "CALL"
    }
    ]
1 голос
/ 24 мая 2011

Я думаю, что это невозможно, поскольку в объекте json

var o = 
{
 "p1": value1,
 "p2": value2 
}

p1 и p2 считаются свойствами объекта, поэтому дублирующиеся свойства перезаписываются.Вместо этого попробуйте использовать массив

, т.е.

targetList : [ { "maxResult" : "2",
        "status" : "OPEN",
        "entryType" : "CALL"}, { "maxResult" : "3",
        "status" : "CLOSED",
        "entryType" : "CALL"}, {..} ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...