2015-04-02 2 views
0

Я действительно ненавижу «делать это для меня», но у меня полная потеря. Кажется, я просто не получаю JSON. Так вот пример моей JSON:JSON Array в массив объектов JS

"max":"10", 
"min":"0", 
"attributes":[ 
    { 
     "attributeName":"Fortitude", 
     "attributeColor":"#B7B7B7" 
    }, 
    { 
     "attributeName":"Vigor", 
     "attributeColor":"#D5A6BD" 
    }, 
    { 
     "attributeName":"Celerity", 
     "attributeColor":"#B4A7D6" 
    } 
] 

Это внешнее, и я хочу, чтобы захватить его, а затем установить переменную JS действовать как массив объектов атрибутов. Так, если в JS я установил:

var attributes = []; 
attributes = whatEverNeedsToGoHere; 

И тогда я перебираю это переменный я мог бы сделать что-то вроде:

console.log(attributes[0].attributeName); 

И получить «Стойкость». Я понимаю, как получить JSON с jQuery с помощью $ .getJSON(); Но я не знаю, что должно произойти, чтобы превратить массив атрибутов в массив объектов.

ОБНОВЛЕНИЕ: Как я называю JSON прямо сейчас.

var attributesData = $.getJSON("jsonDB/attributes.js", function(data){ 

     var thisAttribute = {"attributeName":String(data[i].attributeName),"attributeColor":String(data[i].attributeColor)}; 
     attributes.push(thisAttribute); 
     console.log(attributes.attributeName); 

}); 
+1

«Это внешнее, и я хочу, чтобы захватить его» - Где ваш Аякс вызов, который делает это? –

ответ

1

Это, вероятно, что вы после:

var attributes; 

$.getJSON("jsonDB/attributes.js", function(data){ 
    attributes = data.attributes; 
    console.log(attributes); 
}); 

Вы можете проверить его here. Я затушил getJSON для этой цели:

function getJSON(url, callbackfn){ 
    var data = { 
    "max":"10", 
    "min":"0", 
    "attributes":[ 
     { 
     "attributeName":"Fortitude", 
     "attributeColor":"#B7B7B7" 
     }, 
     { 
     "attributeName":"Vigor", 
     "attributeColor":"#D5A6BD" 
     }, 
     { 
     "attributeName":"Celerity", 
     "attributeColor":"#B4A7D6" 
     } 
    ] 
    } 

    callbackfn(data); 
} 

var attributes; 

getJSON("jsonDB/attributes.js", function(data){ 
    attributes = data.attributes; 
    console.log(attributes); 
}); 
+0

Я ЗНАЛ, ЧТОБЫ БЫЛО, ЧТО ПРОСТО. Симус ... Я ... я люблю тебя. – henonChesser

0

Прежде всего, данные JSon недействительны.

Правильный формат для этих данных задается как Json заключается в следующем:

{ 
    "max": "10", 
    "min": "0", 
    "attributes": [ 
     { 
      "attributeName": "Fortitude", 
      "attributeColor": "#B7B7B7" 
     }, 
     { 
      "attributeName": "Vigor", 
      "attributeColor": "#D5A6BD" 
     }, 
     { 
      "attributeName": "Celerity", 
      "attributeColor": "#B4A7D6" 
     } 
    ] 
} 

И в этой ситуации, я высоко совет использовать Jspath. Jspath позволяет выполнять выражения XPath для данных JSon.

+0

Я посмотрю, что это напоминает мне механизм запросов для JSON. Но нет ли в этом случае обычного способа сделать это в JS или jQuery? – henonChesser

+1

Серьезно полная библиотека для этого небольшого пакета JSON? –

1

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

var data = {"max":"10", 
 
"min":"0", 
 
"attributes":[ 
 
    { 
 
     "attributeName":"Fortitude", 
 
     "attributeColor":"#B7B7B7" 
 
    }, 
 
    { 
 
     "attributeName":"Vigor", 
 
     "attributeColor":"#D5A6BD" 
 
    }, 
 
    { 
 
     "attributeName":"Celerity", 
 
     "attributeColor":"#B4A7D6" 
 
    } 
 
] 
 
} 
 

 
var result = jinqJs().from(data).select('attributes'); 
 

 
document.body.innerHTML += '<pre>' + JSON.stringify(result, null, 4) + '</pre>';
<script src="https://rawgit.com/fordth/jinqJs/master/jinqjs.js"></script>

.

var attributes = jinqJs().from('http://..some json url').select('attributes'); 

Это возвращает коллекцию из следующих действий:

[ 
     { 
      "attributeName":"Fortitude", 
      "attributeColor":"#B7B7B7" 
     }, 
     { 
      "attributeName":"Vigor", 
      "attributeColor":"#D5A6BD" 
     }, 
     { 
      "attributeName":"Celerity", 
      "attributeColor":"#B4A7D6" 
     } 
    ] 
Смежные вопросы