2015-08-17 3 views
-1

Я пытаюсь stringify моей JSON -Строка JSON имеет нулевые значения

for (var i = 0 ; i < lines.length ; i++) { 

    var label = lines[i]; 
    var value = 1; 

    item = []; 
    item["label"] = label; 
    item["value"] = value; 

    jsonObj.push(item); 
} 

var jsonString = JSON.stringify(jsonObj); 

Во время итерации, как label и value присваиваемые соответствующим образом с правильными значениями.

Однако jsonString полон нулевых значений, почему это так?

+3

try 'var item = {};' –

+0

Вы создаете массив, а не объект. – TryingToImprove

ответ

3

Это должно быть item = {};, а не item = [];.

Первый объект - это буквальный, а второй - литерал массива.

Для хорошей мерой, сделать var items = {};

+0

Правильный ответ будет приниматься при разрешении. – Ebikeneser

2

Дело в том, что вы создаете массив item = [] затем установить его строковые свойства.

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

Раствор для вас было бы заменить его с объектом {}

выдержка из спецификации:

If Type(value) is Object, and IsCallable(value) is false 
    If the [[Class]] internal property of value is "Array" then 
     Return the result of calling the abstract operation JA with argument value. 

следуют

Let len be the result of calling the [[Get]] internal method of value with argument "length". 
Let index be 0. 
Repeat while index < len 
    Let strP be the result of calling the abstract operation Str with arguments ToString(index) and value. 
    If strP is undefined 
     Append "null" to partial. 
    Else 
     Append strP to partial. 
    Increment index by 1. 

Ссылки:

+0

Отличные ссылки, маноды, попавшие туда как раз перед тем, как бы так не пришлось принять его ответ. – Ebikeneser

+0

@ Ebikeneser, так что вы предпочитаете скорость по качеству и уровню детализации? Хорошо – zerkms

1

Как отмечалось, вы должны сделать свой товар объект. Вот JSFiddle, чтобы вы начали с примера.

var item; 
var lines = ["a","b","c"]; 
var jsonObj = {}; 
jsonObj.items = []; 

for (var i = 0 ; i < lines.length ; i++) { 

    var label = lines[i]; 
    var value = 1; 

    item = {}; 
    item["label"] = label; 
    item["value"] = value; 

    jsonObj.items.push(item); 
    console.log(jsonObj); 
} 

var jsonString = JSON.stringify(jsonObj); 
console.log(jsonString); 

 Смежные вопросы

  • Нет связанных вопросов^_^