【问题标题】:Error in Parsing a multiline json object in python在 python 中解析多行 json 对象时出错
【发布时间】:2020-11-24 11:55:32
【问题描述】:

尝试在 Python 中解析一个多行、多个用逗号分隔的 json 对象。 但是,无论是 json.load 模式还是列表模式或 jsonlines 对象模式,都无法解析数据。

输入:它以以下方式存在于单个文件中

{
    "0": "mdm-898040540420",
    "1": {
        "dchannel": "FR al"
    },
    "2": {
        "dchannel": "FR Website"
    },
    "3": {
        "dcountry": "BDF"
    }
},
{
    "0": "mdm-846290540037",
    "1": {
        "dchannel": "FR alk"
    },
    "2": {
        "dchannel": "FR Website"
    },
    "3": {
        "dcountry": "BDF"
    }
},......

等等,它就像一个文件中的许多小的 json 对象。

试图用 [] 将整个文件括起来 - [{json1},{json2}...] 并使用

with open("C:\\Users\\viv\\Downloads\\2020_11_21-10_31_03_PM_v2.json", 'r') as f:
    object_list = []
    for line in f.readlines():
        object_list.append(json.loads(line))

AND 不使用 [].,将整体括在 {} 中并使用 json 库。无论采用哪种方法,都无法解析。

任何解析它的方法将不胜感激。 我想生成一个 csv 作为输出,其中:

id               dchannel             dcountry
mdm-846290540037,"FR al, FR Website", BDF 

错误信息:

1. While trying 
df = pd.read_json("C:\\Users\\viv\\Downloads\\2020_11_21-10_31_03_PM_v2.json", lines=True)
df.head()

    self._parse_no_numpy()
  File "D:\workspace\BillingDashboard\venv\lib\site-packages\pandas\io\json\_json.py", line 1093, in _parse_no_numpy
    loads(json, precise_float=self.precise_float), dtype=None
ValueError: Expected object or value


2. while running : 

entitiesList = []
print("Started Reading JSON file which contains multiple JSON document")
with open("C:\\Users\\viv\\Downloads\\edited_file_b.json",'r') as f:
    for jsonObj in f:
        entitiesDict = json.loads(jsonObj)
        entitiesList.append(entitiesDict)




  File "D:/workspace/BillingDashboard/bsdf_json_csv_converter.py", line 12, in <module>
    entitiesDict = json.loads(jsonObj)
  File "C:\python37\lib\json\__init__.py", line 348, in loads
    return _default_decoder.decode(s)
  File "C:\python37\lib\json\decoder.py", line 337, in decode
Started Reading JSON file which contains multiple JSON document
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "C:\python37\lib\json\decoder.py", line 355, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 2 column 1 (char 2)

Process finished with exit code 1

【问题讨论】:

  • 你能显示错误信息吗?
  • 添加错误,@PIG208

标签: python json parsing


【解决方案1】:

问题可能与json数据的格式有关。

例如,如果原始 json 看起来像这样:

{"0": "mdm-898040540420",
    "1": {
        "dchannel": "FR al"
    },
    "2": {
        "dchannel": "FR Website"
    },
    "3": {
        "dcountry": "BDF"
    }
},
{
    "0": "mdm-846290540037",
    "1": {
        "dchannel": "FR alk"
    },
    "2": {
        "dchannel": "FR Website"
    },
    "3": {
        "dcountry": "BDF"
    }
}

您可以尝试用{"test": []} 包围它并用json.loads(text) 解析它(我觉得解析器在您的情况下并不重要)。

{"test":
    [{"0": "mdm-898040540420",
        "1": {
            "dchannel": "FR al"
        },
        "2": {
            "dchannel": "FR Website"
        },
        "3": {
            "dcountry": "BDF"
        }
    },
    {
        "0": "mdm-846290540037",
        "1": {
            "dchannel": "FR alk"
        },
        "2": {
            "dchannel": "FR Website"
        },
        "3": {
            "dcountry": "BDF"
        }
    }]
}

以下应该有效:

with open('./jsonpath.json', 'r') as f:
    data = json.loads(f.read())
print(data)

【讨论】:

  • self._parse_no_numpy() 文件“D:\workspace\BillingDashboard\venv\lib\site-packages\pandas\io\json_json.py”,第 1093 行,在 _parse_no_numpy 加载(json,precision_float= self.precise_float), dtype=None ValueError: Expected object or value
【解决方案2】:

你为什么不试试 pandas?

from pandas import read_json
df = read_json("C:\\Users\\viv\\Downloads\\2020_11_21-10_31_03_PM_v2.json")
df.to_csv('save_path/file_name.csv')

尝试在 read_json 的 orient 参数中使用不同的值。

【讨论】:

  • read_json 也试过了,它给了我同样的错误 - 解析 json 时出错
  • 向我们显示错误,否则我们将不知道如何继续。
  • self._parse_no_numpy() 文件“D:\workspace\BillingDashboard\venv\lib\site-packages\pandas\io\json_json.py”,第 1093 行,在 _parse_no_numpy 加载(json,precision_float= self.precise_float), dtype=None ValueError: Expected object or value
猜你喜欢
  • 2013-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-30
  • 2023-02-25
  • 1970-01-01
相关资源
最近更新 更多