Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用python修改Json文件格式_Python_Arrays_Json_Python Import - Fatal编程技术网

用python修改Json文件格式

用python修改Json文件格式,python,arrays,json,python-import,Python,Arrays,Json,Python Import,我有一个格式如下的JSON文件: (为清晰起见,多行) (第0001行) 。。。。 (第9999行) 我想在上面运行一个程序,但是,该程序无法以上述格式读取它。 因此,我想将其格式修改为: [{ "_id": "iD_0001", "skills": [{ "name": "Project Management" }, { "name": "Business Development" }] },{ "_id":"iD_999

我有一个格式如下的JSON文件: (为清晰起见,多行)

(第0001行)

。。。。 (第9999行)

我想在上面运行一个程序,但是,该程序无法以上述格式读取它。 因此,我想将其格式修改为:

[{
    "_id": "iD_0001",
    "skills": [{
        "name": "Project Management"
    }, {
        "name": "Business Development"
    }]
},{
    "_id":"iD_9999",
    "skills": [{
        "name": "Negotiation"
    }, {
        "name": "Banking"
    }]
}]
本质上,将所有条目放在一个数组中。 有没有一种方法可以使用Python或demjson实现这一点

备选方案:我制作了一个程序,获取这些json文件中的技能,并将它们发送到一个文本文件(Test.txt),但是它只适用于第二种格式,而不适用于第一种格式。您能否建议修改以使其适用于第一种格式(如上)? 这是我的节目:

import json
from pprint import pprint
with open('Sample.json') as data_file:    
    data = json.load(data_file)

    with  open('Test.txt', 'w') as f:
        for x in data:
            for y in x["skills"]: 
                    f.write(y["name"])
        f.close()
解决方案

感谢Antti Haapala注意到第一种格式下Json对象的链接,感谢Walter Witzel和Josh J提出了其他答案。 由于第一种格式是单个对象的连锁,如果我们逐行而不是作为一个整体加载第一个Json文件,那么程序运行良好。我是这样做的:

data = []
with open('Sample1-candidats.json') as data_file:    
for line in data_file:
    data.append(json.loads(line))

    with  open('Test.txt', 'w') as f:
        for x in data:
            for y in x["skills"]: 
                    f.write(y["name"])
        f.close()

来了。这假设您的文件只是一组连接在一起的单独json对象,您需要在json对象列表中进行转换

import json
from pprint import pprint

with open('sample.json') as data_file:    
    strData = '[' + ''.join(data_file.readlines()).replace('}\n{','},{') + ']'
    data = eval(strData)

with  open('Test.txt', 'w') as f:
    for x in data:
        for y in x["skills"]: 
            f.write(y["name"])

以下是您可以采取的解决问题的步骤。因为这听起来有点像家庭作业,我会给你逻辑和指针,但不是代码

  • 打开文件进行读取
  • 将文件读入字符串变量(如果足够小,可以满足内存限制)
  • 为输出创建空的
    列表
  • 上拆分字符串…
  • json.load
    结果列表的每一部分
  • 将每个结果附加到空输出列表中
  • 喝杯咖啡庆祝一下

  • 第一个不是单个JSON文件
    json.load
    一次只从文件中加载一个对象。第一个是多个JSON对象的链接。请检查:在您的示例文件中,每个记录之间是否有一个文本
    ..
    ,或者您是否将其作为缩短复制/粘贴的示例?
    ..
    用于缩短复制粘贴。不是文字只是一个小小的观察:您的解决方案假设您没有分享关于您的问题的信息(事实上每行有一个json对象)。按照您呈现json示例的方式,我们假设您有\n个字符出现断行。我在上面的注释中引用的解决方案更好,但这也会起作用。不幸的是,这不是一个家庭作业,文件可能会变得太大,无法满足内存限制。不过我明白你的道理了,谢谢!
    data = []
    with open('Sample1-candidats.json') as data_file:    
    for line in data_file:
        data.append(json.loads(line))
    
        with  open('Test.txt', 'w') as f:
            for x in data:
                for y in x["skills"]: 
                        f.write(y["name"])
            f.close()
    
    import json
    from pprint import pprint
    
    with open('sample.json') as data_file:    
        strData = '[' + ''.join(data_file.readlines()).replace('}\n{','},{') + ']'
        data = eval(strData)
    
    with  open('Test.txt', 'w') as f:
        for x in data:
            for y in x["skills"]: 
                f.write(y["name"])