Convert JSON to Javascript Array Object - node.js
Solution 1
You can try Javascript's inbuilt functions like this:
var fs = require('fs');
var results = JSON.parse(fs.readFileSync('games.json', 'utf8'));
function grabDataFromAGame(elem, index, array) {
// Grab the data from the game object you need
var gameObj = {};
gameObj.challengerScore = elem.challengerScore;
gameObj.defenderScore = elem.defenderScore;
gameObj.id = elem.objectId;
saveGameObjToFile(gameObj);
}
function saveGameObjToFile(gameObj){
var gameFile = fs.openSync('./gameObj-' + gameObj.id + '.json', 'w');
fs.writeSync(gameFile, JSON.stringify(gameObj));
}
results.results.forEach(grabDataFromAGame);
This code generated the following files:
~/salesman 542-> node so.js
~/salesman 543->
~/salesman 543->
~/salesman 543-> ll gameObj-*
-rw-r--r-- 1 neerajsharma staff 59B Jun 11 18:56 gameObj-pmiACGwe45.json
-rw-r--r-- 1 neerajsharma staff 59B Jun 11 18:56 gameObj-HqptXdYmQL.json
~/salesman 544-> cat gameObj-pmiACGwe45.json | python -m json.tool
{
"challengerScore": 18,
"defenderScore": 21,
"id": "pmiACGwe45"
}
~/salesman 545->
Note that it is not recommended to use sync
calls with Node, because node is single-threaded and your application is blocked till the sync calls are complete.
An example of using forEach can be found here
Solution 2
Your code is very close:
var results = JSON.parse(fs.readFileSync('Game.json', 'utf8'))['results'];
You get object that has Array
set as value for key "results".
Solution 3
Try:
results.results.forEach(function (result) {
console.log(result);
});
You should try to use the async calls. Node.js is really meant for asynchronous non-block I/O.
MayNotBe
Updated on June 12, 2020Comments
-
MayNotBe almost 4 years
I don't know any Javascript. I have a .json file that looks like this:
{ "results": [ { "challenger": { "__type": "Pointer", "className": "Player", "objectId": "STWAxAHKay" }, "challengerScore": 18, "createdAt": "2014-12-05T21:43:01.099Z", "defender": { "__type": "Pointer", "className": "Player", "objectId": "UGAmRVd7Tr" }, "defenderScore": 21, "objectId": "pmiACGwe45", "updatedAt": "2014-12-05T21:43:01.099Z" }, { "challenger": { "__type": "Pointer", "className": "Player", "objectId": "STWAxAHKay" }, "challengerScore": 23, "createdAt": "2014-12-05T21:43:01.969Z", "defender": { "__type": "Pointer", "className": "Player", "objectId": "UGAmRVd7Tr" }, "defenderScore": 25, "objectId": "HqptXdYmQL", "updatedAt": "2014-12-05T21:43:01.969Z" } ]}
I'm reading it into my script like this:
var fs = require('fs'); var results = JSON.parse(fs.readFileSync('Game.json', 'utf8'));
results
is an object but it's not an array.I would like to make it an array so I can iterate through each game, grab the data I need from each game and use it to create a new object that I ultimately save in a .json file.
I would love for someone to guide me through this entire process but I would be thrilled if someone can just show me how to make an array of games that I can iterate through just to get me started.
Thank you.
-
TaoPR almost 9 yearsThe OP's requirement may nor may not rely on async I/O. But I agree with you that whenever it's possible and beneficial using async I/O on node.js, why don't use it.