如何修复使用pandas打开JSON文件时出现的错误?

2024-04-19 06:10:32 发布

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

我试图用pandas打开JSON文件,但收到多个错误:

df = pd.read_json('offers_feed_01.json', lines = True, orient = "split")

我运行此代码并收到:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-10-ba348dcc5991> in <module>
----> 1 df = pd.read_json('offers_feed_01.json', lines = True, orient = "split")

/opt/anaconda3/lib/python3.8/site-packages/pandas/util/_decorators.py in wrapper(*args, **kwargs)
    197                 else:
    198                     kwargs[new_arg_name] = new_arg_value
--> 199             return func(*args, **kwargs)
    200 
    201         return cast(F, wrapper)

/opt/anaconda3/lib/python3.8/site-packages/pandas/util/_decorators.py in wrapper(*args, **kwargs)
    294                 )
    295                 warnings.warn(msg, FutureWarning, stacklevel=stacklevel)
--> 296             return func(*args, **kwargs)
    297 
    298         return wrapper

/opt/anaconda3/lib/python3.8/site-packages/pandas/io/json/_json.py in read_json(path_or_buf, orient, typ, dtype, convert_axes, convert_dates, keep_default_dates, numpy, precise_float, date_unit, encoding, lines, chunksize, compression, nrows)
    616         return json_reader
    617 
--> 618     result = json_reader.read()
    619     if should_close:
    620         filepath_or_buffer.close()

/opt/anaconda3/lib/python3.8/site-packages/pandas/io/json/_json.py in read(self)
    751                 data = ensure_str(self.data)
    752                 data = data.split("\n")
--> 753                 obj = self._get_object_parser(self._combine_lines(data))
    754         else:
    755             obj = self._get_object_parser(self.data)

/opt/anaconda3/lib/python3.8/site-packages/pandas/io/json/_json.py in _get_object_parser(self, json)
    775         obj = None
    776         if typ == "frame":
--> 777             obj = FrameParser(json, **kwargs).parse()
    778 
    779         if typ == "series" or obj is None:

/opt/anaconda3/lib/python3.8/site-packages/pandas/io/json/_json.py in parse(self)
    884 
    885         else:
--> 886             self._parse_no_numpy()
    887 
    888         if self.obj is None:

/opt/anaconda3/lib/python3.8/site-packages/pandas/io/json/_json.py in _parse_no_numpy(self)
   1122             decoded = {
   1123                 str(k): v
-> 1124                 for k, v in loads(json, precise_float=self.precise_float).items()
   1125             }
   1126             self.check_keys_split(decoded)

ValueError: Expected object or value

该文件位于正确的位置,我已经多次更改了方向,并且我使用相同的代码运行了另一个类似的文件,并且工作正常。我正在运行的.json文件如下所示:

 {
  "offers": [
    {
      "offerType": "mobile-app",
      "linkDest": "app-store",
      "convertsOn": "install-and-open",
      "appInfo": {
        "appID": "",
        "previewLink": "",
        "appName": "Housejoy",
        "appCategory": "Lifestyle",
        "appIcon": ""
      },
      "targets": [
        {
          "offerID": "",
          "approvalStatus": "approved",
          "offerStatus": "active",
          "trackingLink": "",
          "countries": [
            "IN"
          ],
          "platforms": [
            "iphone"
          ],
          "payout": {
            "amount": 0.94,
            "currency": "USD"
          },
          "endDate": null,
          "dailyConversionCap": null,
          "restrictions": {
            "allowIncent": false,
            "deviceIDRequired": false,
            "sourceAppIDRequired": false,
            "minOSVersion": "9.0",
            "allowedPlacements": null,
            "blockedPlacements": []
          }
        }
      ]
    },

我已经尝试删除{"offers":,但也没有成功。 有人知道会有什么问题吗


Tags: inpyselfjsonobjpandasreaddata
2条回答

尝试打开并读取数据,然后使用pandas读取数据。您将发现几个嵌套列表,它们没有解析到您可能需要的级别。但看看这是否能让你开始

with open('yourjsonfile.json', 'rb') as f:
    data = f.read().decode('utf-8')

df = pd.json_normalize(data['offers']) 

.json文件格式不正确。使用诸如https://jsonlint.com/之类的工具验证

相关问题 更多 >