我有7MB的.json文件,我用node.js过滤数据并将数据存储到displayMe
数组中。当我在控制台中显示该短路阵列时,它在那里可见。但是当我尝试使用JSON.stringify
编写该数组时。我得到一个带有空白数组的json文件。
以下是代码:
var fs = require("fs");
var data = fs.readFileSync('India2011.json');
var myData=JSON.parse(data);//contains main array
var len=myData.length;//main array length
var k=1;
var count=0;
var displayMe=[];
var canRead=0;
var cannotRead=0;
for (var i = 0; i <len; i++) {
for (var j = k; j <=35; j++) {
var obj={};
if ((myData[i]["State Code"]==(j))&&(myData[i]["Total/ Rural/ Urban"]=="Total")&&(myData[i]["Age-group"]=="All ages")) {
obj["Literate - Persons"]=parseInt(myData[i]["Literate - Persons"]);
obj["Illiterate - Persons"]=parseInt(myData[i]["Illiterate - Persons"]);
obj["Total - Persons"]=parseInt(myData[i]["Total Persons"]);
//sort.push(obj);
displayMe[myData[i]["Area Name"]]=(obj);
count+=(parseInt(myData[i]["Total Persons"]));
canRead+=(parseInt(myData[i]["Literate - Persons"]));
cannotRead+=(parseInt(myData[i]["Illiterate - Persons"]));
++k;
};
};
};
fs.writeFile( "displayMe.json", JSON.stringify( displayMe ), "utf8");// this part not working.
console.log(displayMe);//this is working
这是控制台输出:
[ 'State - JAMMU & KASHMIR': { 'Literate - Persons': 7067233,
'Illiterate - Persons': 5474069,
'Total - Persons': 12541302 },
'State - HIMACHAL PRADESH': { 'Literate - Persons': 5039736,
'Illiterate - Persons': 1824866,
'Total - Persons': 6864602 },
'State - PUNJAB': { 'Literate - Persons': 18707137,
'Illiterate - Persons': 9036201,
'Total - Persons': 27743338 },
'State - CHANDIGARH': { 'Literate - Persons': 805438,
'Illiterate - Persons': 250012,
'Total - Persons': 1055450 },
'State - UTTARAKHAND': { 'Literate - Persons': 6880953,
'Illiterate - Persons': 3205339,
'Total - Persons': 10086292 },
'State - HARYANA': { 'Literate - Persons': 16598988,
'Illiterate - Persons': 8752474,
'Total - Persons': 25351462 },
'State - NCT OF DELHI': { 'Literate - Persons': 12737767,
'Illiterate - Persons': 4050174,
'Total - Persons': 16787941 },
'State - RAJASTHAN': { 'Literate - Persons': 38275282,
'Illiterate - Persons': 30273155,
'Total - Persons': 68548437 },
'State - UTTAR PRADESH': { 'Literate - Persons': 114397555,
'Illiterate - Persons': 85414786,
'Total - Persons': 199812341 },
'State - BIHAR': { 'Literate - Persons': 52504553,
'Illiterate - Persons': 51594899,
'Total - Persons': 104099452 }
]
答案 0 :(得分:1)
问题是上面的js代码没有以适当的JSON格式生成数组。我试过并修复了这个问题。这是工作代码:
var fs = require("fs");
var data = fs.readFileSync('India2011.json');
var myData=JSON.parse(data);//contains main array
var len=myData.length;//main array length
var k=1;
var count=0;
var displayMe=[];
var canRead=0;
var cannotRead=0;
for (var i = 0; i <len; i++) {
var obj2={};//changes here
for (var j = k; j <=35; j++) {
var obj={};
var header;//changes here
if ((myData[i]["State Code"]==(j))&&(myData[i]["Total/ Rural/ Urban"]=="Total")&&(myData[i]["Age-group"]=="All ages")) {
obj["Literate - Persons"]=parseInt(myData[i]["Literate - Persons"]);
obj["Illiterate - Persons"]=parseInt(myData[i]["Illiterate - Persons"]);
obj["Total - Persons"]=parseInt(myData[i]["Total Persons"]);
header= myData[i]["Area Name"];//changes here
obj2[header]=obj;//changes here
displayMe.push(obj2);//changes here
count+=(parseInt(myData[i]["Total Persons"]));
canRead+=(parseInt(myData[i]["Literate - Persons"]));
cannotRead+=(parseInt(myData[i]["Illiterate - Persons"]));
++k;
//console.log("Addesd "+myData[i]["Total Persons"]+" Time j: "+k+" State name"+myData[i]["Area Name"]+" i:"+i+"k:"+k+" count "+count);
};
};
};
fs.writeFile( "displayMe.json", JSON.stringify( displayMe ), "utf8");
console.log(displayMe);
这是一些变化。它现在正在运作。
答案 1 :(得分:0)
问题是由这一行引起的:
var displayMe = [];
您正在将displayMe
初始化为空数组。但是,您随后将该数组视为对象:
displayMe[myData[i]["Area Name"]] = (obj);
这不会正确地串联到JSON,因为数组应该具有length
依赖的特定属性(如JSON.stringify()
)。
相反,将displayMe
初始化为空对象:
var displayMe = {};
答案 2 :(得分:0)
引用:&#34;但是当我尝试使用JSON.stringify编写该数组时。我得到一个带有空白数组的json文件。&#34;
这是因为JSON似乎解析或 stringify Array hybrid 的命名属性。
您的数组长度为0.结果肯定是= []。
您必须替换Array:
[ 'State - JAMMU [...] Persons': 104099452 } ]
使用适当的对象:
{ 'State - JAMMU [...] Persons': 104099452 } }