2013-08-18 1 views
1

Я пытаюсь создать и отправить сообщение JSon в следующем формате:Javascript Создать JSon

var listObjects = []; 

$.each(results, function(index, value){ 

var item = new Object(); 
item.title = value.Title; 
item.code = value.Code; 

listObjects.push(item); 

}); 

var jsonResult = JSON.stringify(listObjects); 

в основном это создаст мой JSON как это:

[{"title":"Product 1","code":123456789012}, 
{"title":"Product 2","code":123456789012}, 
{"title":"Product 3","code":123456789012}, 
{"title":"Product 4","code":123456789012}, 
{"title":"Product 5","code":123456789012}, 
{"title":"Product 11","code":123456789012}, 
{"title":"Product 12","code":123456789012}, 
{"title":"Product 13","code":123456789012}] 

, как я могу это сделать так что, если я хочу добавить некоторые метаданные в свой json, которые не будут повторяться для каждого элемента, но только вверху ... примерно:

category: x 
type: y 
... 
    items: 
     title: ..... 
     code: ...... 

поэтому в основном категория и тип будет определять целые элементы в JSON, но не повторяются для каждого элемента ...

ответ

3

, как я могу сделать это так, что если я хочу добавить некоторые метаданные к моему JSON, который будет не повторять для каждого элемента, но только в верхней

Используйте объект как обертка с мета-данными и items массива:

var jsonResult = JSON.stringify({ 
    category: x, 
    type:  y, 
    items: listObjects 
}); 

Я предполагаю, что там x и y - переменные; если они предназначены для литералов, поставьте их в кавычки.


Side Примечание: В JavaScript нет никаких оснований для использования new Object. Просто используйте {}, что делает то же самое. Вы также можете поместить в него инициализаторы свойств, а не назначать свойства потом. Вот ваш $.each с этими изменениями (и отступов):

$.each(results, function(index, value){ 

    var item = { 
     title: value.Title, 
     code: value.Code 
    }; 

    listObjects.push(item); 

}); 

Вы можете, конечно, сочетают в себе те:

$.each(results, function(index, value){ 

    listObjects.push({ 
     title: value.Title, 
     code: value.Code 
    }); 

}); 

И последнее, но не менее важное: Что вы делаете с $.each является именно то, что $.map предназначено для:

var listObjects = $.map(results, function(index, value){ 
    return { 
     title: value.Title, 
     code: value.Code 
    }; 
}); 
+0

Отлично! Большое спасибо! –

+1

@DavidDury: Добро пожаловать! Рад, что помогло. –

0

Просто создайте объект

var data={}; 
// your header 
var header={category: x,type: y}; 
//your jsonresult 
var jsonResult= [{"title":"Product 1","code":123456789012}, 
{"title":"Product 2","code":123456789012}, 
{"title":"Product 3","code":123456789012}, 
{"title":"Product 4","code":123456789012}, 
{"title":"Product 5","code":123456789012}, 
{"title":"Product 11","code":123456789012}, 
{"title":"Product 12","code":123456789012}, 
{"title":"Product 13","code":123456789012}] 

data.heade=header; 
data.result=jsonResult; 

your data should be {header:{category: x,type: y}, 
jsonResult:[{"title":"Product 1","code":123456789012}, 
    {"title":"Product 2","code":123456789012}, 
    {"title":"Product 3","code":123456789012}, 
    {"title":"Product 4","code":123456789012}, 
    {"title":"Product 5","code":123456789012}, 
    {"title":"Product 11","code":123456789012}, 
    {"title":"Product 12","code":123456789012}, 
    {"title":"Product 13","code":123456789012}] 
}