我有以下JSON文件:
a_lis= [
{
"id": "0394820934",
"obj": [
{
"fruit": "mint",
"origin": "brazil",
"seller": "unknown",
"record": false
}
],
"available": false,
"count": 0
},
{
"id": "0239840394",
"obj": [
{
"fruit": "grapes",
"origin": "origin",
"seller": "unknown",
"record": false
},
{
"fruit": " ",
"record": false
},
{
"fruit": "ARN",
"origin": "destination",
"seller": "unknown",
"record": true
},
{
"fruit": " no ",
"record": false
},
{
"fruit": "apple",
"origin": "unknown",
"seller": "walmart",
"record": false
}
],
"available": false,
"count": 0
},
{
"id": "0928293820982309",
"obj": [
{
"fruit": "tomato",
"origin": "COL",
"seller": "unknown",
"record": false
},
{
"fruit": "Watermelon",
"origin": "destination",
"seller": "unknown",
"record": false
},
{
"fruit": " ",
"record": false
},
{
"fruit": "pear",
"origin": "return_date",
"seller": "walmart",
"record": true
}
],
"available": false,
"count": 0,
"updated": 0
},
{
"id": "23423423",
"obj": [
{
"fruit": "10",
"origin": "usa",
"seller": "cotsco",
"record": false
}
],
"available": false,
"count": 0
},
{
"id": "230948",
"obj": [
{
"fruit": " ",
"record": false
},
{
"fruit": "pear",
"origin": "adult_companion",
"seller": "sears",
"record": true
},
{
"fruit": "apple",
"record": false
},
{
"fruit": "Watermelon",
"origin": "Japan",
"seller": "unknown",
"record": true
},
{
"fruit": " apple ",
"record": false
},
{
"fruit": " lemon ",
"origin": "Canada",
"seller": "unknown",
"record": true
},
{
"fruit": " the apple is good ",
"record": false
},
{
"fruit": " apple ",
"origin": "COL",
"seller": "sears",
"record": true
}
],
"available": false,
"count": 0
}
]
上面的文件是一个目录列表。我如何复制并附加到a_list
所有包含单词“apple”的子词典中,将该单词替换为单词lemon?。例如:
a_lis = [
{
"id": "0394820934",
"obj": [
{
"fruit": "mint",
"origin": "brazil",
"seller": "unknown",
"record": false
}
],
"available": false,
"count": 0
},
{
"id": "0239840394",
"obj": [
{
"fruit": "grapes",
"origin": "origin",
"seller": "unknown",
"record": false
},
{
"fruit": " ",
"record": false
},
{
"fruit": "ARN",
"origin": "destination",
"seller": "unknown",
"record": true
},
{
"fruit": " no ",
"record": false
},
{
"fruit": "apple",
"origin": "unknown",
"seller": "walmart",
"record": false
}
],
"available": false,
"count": 0
},
{
"id": "0928293820982309",
"obj": [
{
"fruit": "tomato",
"origin": "COL",
"seller": "unknown",
"record": false
},
{
"fruit": "Watermelon",
"origin": "destination",
"seller": "unknown",
"record": false
},
{
"fruit": " ",
"record": false
},
{
"fruit": "pear",
"origin": "return_date",
"seller": "walmart",
"record": true
}
],
"available": false,
"count": 0,
"updated": 0
},
{
"id": "23423423",
"obj": [
{
"fruit": "10",
"origin": "usa",
"seller": "cotsco",
"record": false
}
],
"available": false,
"count": 0
},
{
"id": "230948",
"obj": [
{
"fruit": " ",
"record": false
},
{
"fruit": "pear",
"origin": "adult_companion",
"seller": "sears",
"record": true
},
{
"fruit": "apple",
"record": false
},
{
"fruit": "Watermelon",
"origin": "Japan",
"seller": "unknown",
"record": true
},
{
"fruit": " apple ",
"record": false
},
{
"fruit": " lemon ",
"origin": "Canada",
"seller": "unknown",
"record": true
},
{
"fruit": " the apple is good ",
"record": false
},
{
"fruit": " apple ",
"origin": "COL",
"seller": "sears",
"record": true
}
],
"available": false,
"count": 0
},
{
"id": "0239840394",
"obj": [
{
"fruit": "grapes",
"origin": "origin",
"seller": "unknown",
"record": false
},
{
"fruit": " ",
"record": false
},
{
"fruit": "ARN",
"origin": "destination",
"seller": "unknown",
"record": true
},
{
"fruit": " no ",
"record": false
},
{
"fruit": "lemon",
"origin": "unknown",
"seller": "walmart",
"record": false
}
],
"available": false,
"count": 0
},
{
"id": "230948",
"obj": [
{
"fruit": " ",
"record": false
},
{
"fruit": "pear",
"origin": "adult_companion",
"seller": "sears",
"record": true
},
{
"fruit": "lemon",
"record": false
},
{
"fruit": "Watermelon",
"origin": "Japan",
"seller": "unknown",
"record": true
},
{
"fruit": " lemon ",
"record": false
},
{
"fruit": " lemon ",
"origin": "Canada",
"seller": "unknown",
"record": true
},
{
"fruit": " the lemon is good ",
"record": false
},
{
"fruit": " lemon ",
"origin": "COL",
"seller": "sears",
"record": true
}
],
"available": false,
"count": 0
}
]
换言之,带有“apple”一词的原始词典保留在列表中,而带有“lemon”一词的复制版本则附加在原始列表中?我尝试如下解析json文件:
import json
from pprint import pprint
json_output = open('file.json','r')
json_output = json.loads(json_output.read())
但是,我不知道如何复制字典和查看字典的嵌套结构。你知道吗
考虑到这里有许多列表和词典,遍历它们似乎非常费劲。你知道吗
解决这个问题的一个更简单的方法就是将它转换成一个字符串,用“lemon”替换“apple”,然后将它转换成一个新的JSON文件,然后将两个JSON文件合并成第三个,这两个文件合并在一起。你知道吗
此代码适用于稍微修改的JSON文件:
你会注意到这里有很多关于引号的游戏。你知道吗
这有几个原因: -Python的jsondecoder不想导入原始的JSON,因为它在标记为“true”和“false”的记录周围缺少双引号-wquotes.json文件"). 我在一个文本编辑器中用find/replace做了这个。如果您不能在文本编辑器中这样做,因为文件太大,或者您有太多的文件要手动执行此操作,那么您可以在Python中通过将文件作为文本文件加载并在那里执行文本替换来执行相同的操作。你知道吗
将JSON加载到python中并在字符串中对其进行操作时,JSON双引号被单引号替换。这就是为什么我必须在将strb作为JSON操作之前将其写入文件。
在合并文件a和文件b并将JSON写入文件时,单引号/双引号问题再次出现。
总的来说,我相信输出与您所期望的输出相匹配(不过,请再次忽略单引号/双引号的差异):
相关问题 更多 >
编程相关推荐