Ошибка при синтаксическом анализе многострочного объекта json в python

#python #json #parsing

#python #json #синтаксический анализ

Вопрос:

Попытка разобрать многострочный, несколько объектов json, разделенных запятой в Python. Однако в любом из режимов либо json.при загрузке или в виде списка, или в виде объекта 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))
 

И без использования []., заключенный целиком в {} и используемую библиотеку 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:workspaceBillingDashboardvenvlibsite-packagespandasiojson_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:python37libjson__init__.py", line 348, in loads
    return _default_decoder.decode(s)
  File "C:python37libjsondecoder.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:python37libjsondecoder.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
 

Комментарии:

1. Не могли бы вы показать сообщения об ошибках?

2. Добавлены ошибки, @PIG208

Ответ №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)
 

Комментарии:

1. self._parse_no_numpy() Файл «D:workspaceBillingDashboardvenvlibsite-packagespandasiojson_json.py «, строка 1093, в _parse_no_numpy загружается (json, precise_float=self.precise_float), dtype=None Ошибка значения: ожидаемый объект или значение

Ответ №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')
 

Попробуйте использовать разные значения в параметре orient для read_json.

Комментарии:

1. read_json тоже пытался, он выдает мне ту же ошибку — ошибка синтаксического анализа json

2. Покажите нам ошибку, иначе мы не будем знать, как действовать дальше.

3. self._parse_no_numpy() Файл «D:workspaceBillingDashboardvenvlibsite-packagespandasiojson_json.py «, строка 1093, в _parse_no_numpy загружается (json, precise_float=self.precise_float), dtype=None Ошибка значения: ожидаемый объект или значение