2014-11-19 3 views
0

У меня очень большой json-файл, и внутри этого json-файла есть массив. Я хотел бы использовать JavaScript, чтобы считать, что JSON в качестве аргумента, разобрать через JSON и принимать только определенные элементы из него и поместить его в новый файл JSON, ниже приведен пример того, что я имею в виду:Возьмите данные из одного json и поместите его в другой

{ 
"contextType": "Account", 
"preferences": null, 
"custodianCode": null, 
"data": [{ 
"id": "0", 
"account": "11111111", 
"field2": true, 
"field3": false, 
"field4": "BROK", 
"field5": "Broker", 
"field6": "1", 
"field7": "Cash" 
},{ 
"id": "1", 
"account": "222222222", 
"field2": true, 
"field3": false, 
"field4": "BROK", 
"field5": "Broker", 
"field6": "1", 
"field7": "Cash" 
}] 

} 

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

{ 
"newArray": [{ 
"id": "0", 
"account": "11111111", 
"field2": true, 
"field3": false, 
"field4": "BROK", 
"field6": "1" 
},{ 
"id": "0", 
"account": "222222222", 
"field2": true, 
"field3": false, 
"field4": "BROK", 
"field6": "1" 
}] 

} 

также файл находится в моем компьютере и может быть выведен на месте, а я пытаюсь использовать Node.js и JavaScript это является то, что у меня есть

var json = require('./simple.json'); 
var keeperFields = ["id", "account", "field2", "field3", "field4", "field6"]; 
var newJSON = {newArray: [] }; 
var i; 
var fields; 

for (i = 0; i < keeperFields.length; i++) { 
    for (fields in json) { 
    if (json.hasOwnProperty(keeperFields[i])) { 
     newJSON.newArray.push(keeperFields[i]); 
     } 
     } 
    } 

    console.log(newJSON); 

Это всего лишь небольшой пример, когда настоящий json-файл огромен с тысячами строк. Любая помощь или предложения приветствуются!

Это текущее решение дает мне журнал консольную {newArray: []} вместо ожидаемого результата выше

+0

Вам нужно разобрать JSON в объект, который вы можете прочитать. – Mathletics

ответ

0

Здесь вы идете. Вам нужно было начать с .data области

JSON

json = { 
 
\t "contextType": "Account", 
 
\t "preferences": null, 
 
\t "custodianCode": null, 
 
\t "data": [{ 
 
\t \t "id": "0", 
 
\t \t "account": "11111111", 
 
\t \t "field2": true, 
 
\t \t "field3": false, 
 
\t \t "field4": "BROK", 
 
\t \t "field5": "Broker", 
 
\t \t "field6": "1", 
 
\t \t "field7": "Cash" 
 
\t },{ 
 
\t \t "id": "1", 
 
\t \t "account": "222222222", 
 
\t \t "field2": true, 
 
\t \t "field3": false, 
 
\t \t "field4": "BROK", 
 
\t \t "field5": "Broker", 
 
\t \t "field6": "1", 
 
\t \t "field7": "Cash" 
 
\t }] 
 
} 
 

 
var keeperFields = ["id", "account", "field2", "field3", "field4", "field6"]; 
 
var newJSON = {newArray: [] }; 
 
json.data.forEach(function(obj) { 
 
\t var newObj = {}; 
 
\t for (var i = 0; i < keeperFields.length; i++) { 
 
\t \t if (obj.hasOwnProperty(keeperFields[i])) { 
 
\t \t \t newObj[keeperFields[i]] = obj[keeperFields[i]]; 
 
\t \t } 
 
\t } 
 
\t newJSON.newArray.push(newObj); 
 
}); 
 

 
document.write(JSON.stringify(newJSON));

+0

Не потеряет ли имена полей в новом массиве? Не обращайте внимания, я вижу это сейчас. –

+1

Когда я запускаю это в узле, я получаю результат, который вы искали - просто узнайте, как работают фрагменты кода, чтобы вы могли видеть его в действии! Но я согласен, что итерация по полям хранителя так, как вы делаете, имеет больше смысла. –

+0

спасибо, что отлично поработал, я тоже должен начать использовать foreach. – Dom12493

0

Если вы знаете формат входного файла стандартизирована вы можете сделать это легко. Что-то, как это должно работать ...

// assuming you loaded your data into a json object named json and that it contains a field called "data" that contains a list of the records you want to inject into the new array. 
 
var json = require('./simple.json'); 
 
var keeperFields = ["id", "account", "field2", "field3", "field4", "field6"]; 
 
var newJSON = { 
 
    newArray: [] 
 
}; 
 

 
// put the list of records into a convenience var. 
 
var records = json.data; 
 
// loop through the records 
 
for (var recordId in data) { 
 
    // Grab the current record 
 
    var record = records[recordId]; 
 
    // Create a new record 
 
    var newRecord = []; 
 
    // Loop through the keeperfields. Since they are named you can create fields in the new record using the same field names 
 
    for (var field in keeperFields) { 
 
    // Copy record data from source record to new record 
 
    newRecord[field] = record[field]; 
 
    } 
 
    // append the new record to the new data set 
 
    newJSON.newArray.push(newRecord); 
 
}

+0

Спасибо, что это подробное объяснение, приятно видеть разные способы сделать то же самое – Dom12493

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