2

我需要以某种不同于纯文本的文件格式(例如:镶木地板)存储如下 JSON 字符串:

{
  "vidName": "Foo",
  "vidInfo.0.size.length": 10,
  "vidInfo.0.size.width": 10,
  "vidInfo.0.quality": "Good",
  "vidInfo.1.size.length": 7,
  "vidInfo.1.size.width": 3,
  "vidInfo.1.quality": "Bad",
  "vidInfo.2.size.length": 10,
  "vidInfo.2.size.width": 2,
  "vidInfo.2.quality": "Excelent"
}

vidInfo 的索引没有已知的界限(可以是 10、20)。因此,我希望将 vidInfos 放在一个数组中,或者将此类 JSON 对象分解为多个较小的对象。

我发现了这个问题:PHP JSON parsing (number attributes?) 但它是在 PHP 中,我不太明白。而且我不确定它是否与我需要的相同。

中间数据应该是这样的:

{
  "vidName": "Foo",
  "vidInfo": [
    {
      "id": 0,
      "size": {
        "length": 10,
        "width": 10
      },
      "quality": "Good"
    },
    {
      "id": 1,
      "size": {
        "length": 7,
        "width": 3
      },
      "quality": "Bad"
    },
    {
      "id": 2,
      "size": {
        "length": 10,
        "width": 2
      },
      "quality": "Excelent"
    }
  ]
}

或像这样:

{
  "vidName": "Foo",
  "vidInfo": [
    {
      "size": {
        "length": 10,
        "width": 10
      },
      "quality": "Good"
    },
    {
      "size": {
        "length": 7,
        "width": 3
      },
      "quality": "Bad"
    },
    {
      "size": {
        "length": 10,
        "width": 2
      },
      "quality": "Excelent"
    }
  ]
}

我被卡住了,需要一些提示才能继续前进。能否请你帮忙?非常感谢你的帮助。

4

1 回答 1

1

我发现这个库https://github.com/amirziai/flatten可以解决问题。

In [154]: some_json = {
 ...:   "vidName": "Foo",
 ...:   "vidInfo.0.size.length": 10,
 ...:   "vidInfo.0.size.width": 10,
 ...:   "vidInfo.0.quality": "Good",
 ...:   "vidInfo.1.size.length": 7,
 ...:   "vidInfo.1.size.width": 3,
 ...:   "vidInfo.1.quality": "Bad",
 ...:   "vidInfo.2.size.length": 10,
 ...:   "vidInfo.2.size.width": 2,
 ...:   "vidInfo.2.quality": "Excelent"
 ...: }

In [155]: some_json
Out[155]:
{'vidName': 'Foo',
 'vidInfo.0.size.length': 10,
 'vidInfo.0.size.width': 10,
 'vidInfo.0.quality': 'Good',
 'vidInfo.1.size.length': 7,
 'vidInfo.1.size.width': 3,
 'vidInfo.1.quality': 'Bad',
 'vidInfo.2.size.length': 10,
 'vidInfo.2.size.width': 2,
 'vidInfo.2.quality': 'Excelent'}

In [156]: from flatten_json import unflatten_list
     ...: import json 
     ...: nested_json = unflatten_list(json.loads(json.dumps(some_json)), '.')

In [157]: nested_json
Out[157]:
{'vidInfo': [{'quality': 'Good', 'size': {'length': 10, 'width': 10}},
  {'quality': 'Bad', 'size': {'length': 7, 'width': 3}},
  {'quality': 'Excelent', 'size': {'length': 10, 'width': 2}}],
 'vidName': 'Foo'}
于 2019-07-01T06:31:04.757 回答