Python更新JSON文件

时间:2016-10-13 09:16:23

标签: python json

在谷歌搜索并检查其他一些帖子后,我仍然没有找到解决我问题的方法。

让我快速解释一下我的目标:

我有一个JSON配置文件,语法如下:

    [
        {
                "name": "Name 1",
                "provider": "Provider 1",
                "url": "/1",
                "source": "URL"
        },
        {
                "name": "Name 2",
                "provider": "Provider 2",
                "url": "/1",
                "source": "URL 2"
        }

]

我的问题是关键的源代码更改,我有一个脚本生成这些但是我无法找到一种方法来自动更新它们理想情况下我需要告诉我的python脚本注意“提供者1”然后使用提供者1的新URL进行更新,但我的JSON格式不包含单个密钥,因此我需要通过提供者名称进行搜索并更新源。

希望这对任何帮助都有意义。

3 个答案:

答案 0 :(得分:0)

你可以尝试类似下面的内容;​​

    myList = [
            {
                    "name": "Name 1",
                    "provider": "Provider 1",
                    "url": "/1",
                    "source": "URL"
            },
            {
                    "name": "Name 2",
                    "provider": "Provider 2",
                    "url": "/1",
                    "source": "URL 2"
            }

    ]

    def insertOrUpdate(updatedObj):
            existing = [x for x in myList if x['provider'] == updatedObj['provider']]
            if len(existing) == 1:
                    existing[0]['url'] = updatedObj['url']
            else:
                    myList.append(updatedObj)

    insertOrUpdate({"name": "Name 1", "provider": "Provider 1", "url": "updated Url", "source": "URL"})
    insertOrUpdate({"name": "Name X", "provider": "Provider X", "url": "new Url", "source": "URL"})

答案 1 :(得分:0)

假设test.json是包含您在问题中插入的文本的json文件,您可以执行以下操作

import json
with open('test.json') as my_file:
    json_content = json.load(my_file)
for ele in json_content:
    print(ele)

{' name':' Name 1',' provider':' Provider 1',' source' :'网址',' url':' / 1'}

{' name':' Name 2',' provider':' Provider 2',' source' :'网址2',' url':' / 1'}

new_url = 'something. Define it as you want.'
for ele in json_content:
    if ele['provider']=='Provider 1':
        ele['url']=new_url
for ele in json_content:
    print(ele)
for ele in json_content:

print(ele)

{' name':' Name 1',' provider':' Provider 1',' source' :'网址','网址':'某事。根据需要定义它。'} {' name':' Name 2',' provider':' Provider 2',' source':&# 39;网址2','网址':' / 1'}

答案 2 :(得分:0)

非常感谢两个答案都能正常工作我只需要调整一些代码就可以使其准备就绪,因为@MMF建议脚本应该通过cron运行。

非常感谢你的帮助!