在python

时间:2017-08-10 18:57:16

标签: python json

我有一个包含此类无效 json数据的文件(为清晰起见,它已被删除):

[
{
  "orderID": 90,
  "orderDate": '2017-05-10',  #issue №1
  "clientName": "Mr. Bean",
  "clientPhoneN": "123-4567",
  "orderContents": [
    {
      "productID": 05,        #issue №2
      "productName": "Bicycle",
      "quantity": 1,
      "price": 8000
    },
    {
      "productID": 23,
      "productName": "helmet",
      "quantity": 2,
      "price": 1000
    }
  ],
  "orderCompleted": true
}
]

我尝试在python中打开它并将其转换为词典列表,但没有成功。根据具体情况,我会得到不同的错误。我需要花费太多空间来概述我的所有尝试和结束错误。

我在这里有两个问题:

问题№1 - orderDate值中的单引号。 结果如下:

JSONDecodeError: Expecting value

问题№2 - 零前导productID。 结果如下:

JSONDecodeError: Expecting ',' delimiter

我可以对这些问题进行硬编码,但我觉得这不是真正的pythonic方式。

是否有“漂亮”选项可以打开并将此数据文件转换为词典列表?

我很可能希望将productID数据typa保留为integer,但如果不可能,str也可以。

1 个答案:

答案 0 :(得分:1)

试试demjson包:

from demjson import decode
decode("""[
{
  "orderID": 90,
  "orderDate": '2017-05-10',
  "clientName": "Mr. Bean",
  "clientPhoneN": "123-4567",
  "orderContents": [
    {
      "productID": 05,
      "productName": "Bicycle",
      "quantity": 1,
      "price": 8000
    },
    {
      "productID": 23,
      "productName": "helmet",
      "quantity": 2,
      "price": 1000
    }
  ],
  "orderCompleted": true
}
]""")

你会得到:

[{'clientName': 'Mr. Bean',
  'clientPhoneN': '123-4567',
  'orderCompleted': True,
  'orderContents': [{'price': 8000,
    'productID': 5,
    'productName': 'Bicycle',
    'quantity': 1},
   {'price': 1000, 'productID': 23, 'productName': 'helmet', 'quantity': 2}],
  'orderDate': '2017-05-10',
  'orderID': 90}]