将json拆分为较小的json文件

2024-04-19 04:32:17 发布

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

我在解析较小的json文件时遇到了一个问题,下面是到目前为止的代码。。。在

import json
import pathlib
from pprint import pprint
import xmltodict
from yattag import indent

pathlib.Path('x:/xx/xx/AppData/Local/Programs/Python/Python36-32/example').mkdir(parents=True, exist_ok=True)

with open("text.xml", 'rb') as f:
    xmlString = f.read()

jsonString = json.dumps(xmltodict.parse(xmlString), indent=4)

with open("x:/xxxx/xx/AppData/Local/Programs/Python/Python36-32/example/data.json", 'w') as f:
    f.write(jsonString)

a = json.load(open('x:/xxxx/xx/AppData/Local/Programs/Python/Python36-32/example/data.json'))

for k, v in a.items():
    with open("x:/xxxx/xx/AppData/Local/Programs/Python/Python36-32/example/" + k + ".json", "w",
              encoding='utf-16') as p:
        p.write('{"%s" : "%s"}' % (k, v))

原来的json文件是从xml格式转换过来的,然后我的想法是根据数据把json文件拆分成几个更小的json文件,但是它只创建一个json文件“widgets”包含所有的json文件,我想知道有没有办法修改这个文件,并用“widgets”类(“text”,“图像”,“窗口”)。我使用的是python3.x。如果有任何帮助,我将不胜感激

以下是json文件:

^{pr2}$

Tags: 文件fromimportjsonexamplelocalaswith
2条回答

您的顶级JSON dict有一个单独的键值对widgets,它本身就是一个具有单个键值对的dict,widget,它是一个包含单个对象的列表,最后,它包含了您实际想要的对象。在

如果您打印得很好,则更容易看到:

{
  "widgets": {
    "widget": [
      {
        "debug": "on",
        "window": {
          "title": "Sample Konfabulator Widget",
          "name": "main_window",
          "width": 500,
          "height": 500
        },
        "image": {
          "src": "Images\/Sun.png",
          "name": "sun1",
          "hOffset": 250,
          "vOffset": 250,
          "alignment": "center"
        },
        "text": {
          "data": "Click Here",
          "size": 36,
          "style": "bold",
          "name": "text1",
          "hOffset": 250,
          "vOffset": 100,
          "alignment": "center",
          "onMouseUp": "sun1.opacity = (sun1.opacity \/ 100) * 90;"
        }
      }
    ]
  }
}

显然,迭代for k, v in a.items():只循环一次,将k设置为widgets,并将{}设置为小部件dict

如果要循环该列表中的所有元素,则需要显式执行此操作:

^{pr2}$

或者,有一些标准可以更直接地搜索JSON(JSONPath,一个我忘记名字的更简单的标准,一个基于CSS选择器、Apple的KVC等等)的标准,以及PyPI上所有这些标准的库。其中一个libs可以让你做类似的事情:

for k, v in jsonsearch(a, 'widgets/widget/0/*').items():

…如果稍后在列表中找到包含多个内容的示例,则可以简单地将其更改为:

for k, v in jsonsearch(a, 'widgets/widget/*/*').items():

然而,我不知道这些标准或库,好吧,你必须自己做研究,选择一个适合你的。在

您可以使用Json库将Json文件作为数据帧读取,这将使您的生活更加轻松。然后可以使用转储创建自己的json。在

相关问题 更多 >