2013-04-11 84 views
2

我使用下面的代碼來解析一個JSON文件的一行:的JavaScript解析JSON文件

var str = '{ "jobID": "2598752", "account": "TG-CCR120014", "user": "charngda", 
    "pkgT": {"mvapich2-new/1.2": { "libA": ["libmpich.so.1.1"], "flavor": ["default:pgi/7.2-5"] } }, 
    "startEpoch": "1338608868", "runTime": "48", "execType": "user:binary", "exec": "IOR", 
    "numNodes": "4", "sha1": "755187bd8550881bb0c9951822e74a9a53c8d0f3", "execEpoch": 1336757832, 
    "execModify": "Fr, Ma, 1, 12:37:1, 2012", "startTime": "Fr, Ju, , 22:47:4, 2012", 
    "numCores": "64","sizeT": { "bss": "36224", "text": "3502656", "data": "128944" } }'; 
var obj = JSON.parse(str); 
delete obj['flavor']; 
delete obj['pkgT']; 
var newstr = JSON.stringify(obj); 
document.write(str); 

不過,我想分析整個6000線JSON文件。我如何逐行讀取文件並刪除字段,就像我對單行完成的那樣。我沒有使用Javascript的經驗,所以我不知道如何讀取文件或創建新文件。我假設我會使用某種陣列,但我不確定。誰能幫忙?

+1

Javascript並沒有真正使用文件...除非你使用Node或類似的東西。你能提供更多細節嗎? – 2013-04-11 06:22:11

+0

好的我有一個非常大的JSON文件,每行都被格式化爲上面的str變量。最終,我想創建一個新文件,其中每行僅包含jobID和exec字段。我真的不在乎我是如何完成這個的,但是我在這裏問了很多問題,這個Javascript是我最接近解決方案的。如果你有更好的想法,請分享。 – amber4478 2013-04-11 06:25:43

+0

只需創建一個具有jobID和exec屬性的對象。從JSON文件中提取這些字段並將其分配給創建的新對象 – 2013-04-11 06:29:43

回答

0

如果你的文件是這樣的:

[{"jobID": "1",...},{"jobID": "2",...},{"jobID": "3",...},...] 

你可以做這樣的事情:

var objArray = JSON.parse(str); 

for(var k=0; k<objArray.length; k++) { 

delete objArray[k]['flavor']; 
delete objArray[k]['pkgT']; 

    } 
var newstr = JSON.stringify(objArray); 
document.write(newstr); 

只是通過複製和粘貼添加完整的文件內容到str變量。

如果您需要定期執行此操作,此解決方案無法幫助您!

+0

一旦我格式化了所有這些,我不需要再惹他們,所以我會試試這個。謝謝!!! – amber4478 2013-04-12 07:15:13

0

這樣的事情可能會起作用。我沒有一個6000行的JSON文件來測試它,但至少應該明確地告訴你應該在哪裏使用你的解決方案。

請記住,JSON塊只是普通的JavaScript對象,它們是已經有自己的方法的數據結構,因此您可以通過使用標準對象迭代來迭代它們。

var bigObj = json.parse(jsonFile); 
var objArray = []; 
var newStr; 
for (var obj in bigObj){ 
    if (bigObj.hasOwnProperty(obj)){ 
    delete obj['flavor']; 
    delete obj['pkgT']; 
    newStr = JSON.stringify(obj); 
    objArray.push(newStr); 
    } 
} 
document.write(objArray.join("/n").toString());