【问题标题】:JavaScript parsing a JSON fileJavaScript 解析 JSON 文件
【发布时间】:2013-04-11 06:19:40
【问题描述】:

我正在使用以下代码来解析 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 的经验为零,所以我不知道如何读取文件或创建新文件。我假设我会使用某种数组,但我不确定。有人可以帮忙吗?

【问题讨论】:

  • Javascript 并不真正使用文件...除非您使用的是 Node 或类似的东西。能详细点吗?
  • 好的,我有一个非常大的 JSON 文件,每一行都被格式化为上面的 str 变量。最终,我想创建一个新文件,其中每一行只包含 jobID 和 exec 字段。我真的不在乎我是如何做到这一点的,但是我在这里问了很多问题,这个 Javascript 是我最接近解决方案的。如果您有更好的想法,请分享。
  • 只需创建一个具有 jobID 和 exec 作为属性的对象。从您的 JSON 文件中提取这些字段并分配给创建的新对象
  • @amber4478 您需要在网站上执行此操作,还是仅在本地计算机上执行此操作?好像您只需要在本地执行此操作,您从终端运行的简短脚本会更适合此操作(可以是 Node (Javascript))
  • 很抱歉我整天都在工作,但我没有在网站上运行它。我打算为每个 JobID 将同时出现的 exec 文件放在 DSM 中,然后进行一些分析。但是我每天都有大约 6000 行的日志需要解析。

标签: javascript json file


【解决方案1】:

如果您的文件如下所示:

[{"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 变量中即可。

如果您需要定期执行此操作,此解决方案将无济于事!

【讨论】:

  • 一旦我把它们全部格式化,我就不需要再弄乱它们了,所以我会试试这个。谢谢!!!
【解决方案2】:

这样的事情可能会奏效。我没有一个 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());

【讨论】:

    猜你喜欢
    • 2020-05-07
    • 1970-01-01
    • 2017-07-27
    • 1970-01-01
    • 1970-01-01
    • 2016-06-19
    • 1970-01-01
    • 2014-06-12
    • 1970-01-01
    相关资源
    最近更新 更多