无法使用JSON.stringify()生成JSON文件

时间:2016-05-09 10:48:20

标签: javascript arrays json node.js

我有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 }
    ]

3 个答案:

答案 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 }  }