解析多个JSON对象以标准化嵌套的子部分

2024-09-28 01:29:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个传入的JSON文件,其中包含元素[a,b,c],还有一个history元素,其中包含嵌套的JSON和相同的元素[a,b,c]。history元素中可能有多个嵌套条目,或者一个或一个都没有,但下面是关于数据外观的示例。举个例子:

    {

"a": "1",
"b": "2",
"history": [
{
    "a": "11",
"b": "22",
"c": "33"

},
{
    "a": "111",
"b": "222",
"c": "333"

}
],
"c":"3"
}

{   
"a": "a1",
"b": "b1",
"history": [
{
    "a": "a12",
"b": "b12",
"c": "c12"

}
],
"c":"c1"
}

我想规范化这个JSON,使一切看起来像{"a": "111", "c": "333", "b": "222"}{"a": "111", "c": "333", "b": "222"}{"a": "1", "c": "3", "b": "2"}

我构建了一个简单的脚本,它读取文件并执行json.loads文件()并读取“histroy”元素。你知道吗

import json 
j1 = json.loads(j1) 
if "history" in j1.keys():
    j1_hist = j1["history"] 
    with open('/normalzied_json_output', 'w') as f:
       for i in range(len(j1_hist)):
          f.write(json.dumps(j1_hist[1]))
          j1.pop('history', None)
          f.write(json.dumps(j1))

基本上把所有的历史读入一个变量(如果它存在的话)并打开一个输出文件(normalzied_json_output),把每个嵌套的json条目读入输出文件,只提取[a,b,c]并附加到同一个文件中。你知道吗

这在一个基本的层面上起作用,但我正在寻找优化它的可能性。我期待一个巨大的量(十万)每天,想知道我是否可以扩大这个没有太多的循环。你知道吗


Tags: 文件数据injson元素output条目history
1条回答
网友
1楼 · 发布于 2024-09-28 01:29:28

首先,JSON操作通常是昂贵的。你知道吗

使用range生成一个数字列表,现在想想,如果传入的数组长度是10000,它将生成所有这些数字,然后对其进行迭代。你知道吗

您可以删除if条件以检查“history”键,只需使用get方法,如下所示:

import json
with open(filename, 'r') as f:
    j1= json.load(f)
    with open('/normalzied_json_output', 'w') as f:
        for item in j1.get("history", []):
            f.write(json.dumps(item))

        j1.pop('history', None)
        f.write(json.dumps(j1))

顺便说一下,您的代码没有执行您希望它执行的操作,为什么您只读取历史记录中的第一个索引值?为什么你在循环中使用pop,在循环中一遍又一遍地写全文?你知道吗

相关问题 更多 >

    热门问题