Ожидаемый объект или значение: импорт JSON в Python (Pandas)

#json #pandas #parsing #machine-learning #serialization

#json #pandas #синтаксический анализ #машинное обучение #сериализация

Вопрос:

Я использую Python 3, и я попытался с

 data = pd.read_json('file.json',encoding="utf-8",orient='records',lines=True)
  

Но это дает мне:

Ошибка значения: ожидаемый объект или значение

Это структура файла Json, просто краткий пример

 { 
"_id" : ObjectId("5af1b1fd4f4733eacf11dba9"), 
"centralPath" : "XXX2", 
"viewStats" : [
    {
        "totalViews" : NumberInt(3642), 
        "totalSheets" : NumberInt(393), 
        "totalSchedules" : NumberInt(427), 
        "viewsOnSheet" : NumberInt(1949), 
        "viewsOnSheetWithTemplate" : NumberInt(625), 
        "schedulesOnSheet" : NumberInt(371), 
        "unclippedViews" : NumberInt(876), 
        "createdOn" : ISODate("2017-10-13T18:06:45.291 0000"), 
        "_id" : ObjectId("59e100b535eeefcc27ee0802")
    }, 
    {
        "totalViews" : NumberInt(3642), 
        "totalSheets" : NumberInt(393), 
        "totalSchedules" : NumberInt(427), 
        "viewsOnSheet" : NumberInt(1949), 
        "viewsOnSheetWithTemplate" : NumberInt(625), 
        "schedulesOnSheet" : NumberInt(371), 
        "unclippedViews" : NumberInt(876), 
        "createdOn" : ISODate("2017-10-13T19:11:47.530 0000"), 
        "_id" : ObjectId("59e10ff3eb0de5740c248df2")
    }
]
  

}

С помощью этого метода я могу видеть данные, но я хотел бы иметь

 with open('file.json', 'r') as viewsmc:
    data = viewsmc.readlines()
  

При этом вывод

 ['{ n',
 '    "_id" : ObjectId("5af1b1fd4f4733eacf11dba9"), n',
 '    "centralPath" : "XXX2", n',
 '    "viewStats" : [n',
 '        {n',
 '            "totalViews" : NumberInt(3642), n',
 '            "totalSheets" : NumberInt(393), n',
 '            "totalSchedules" : NumberInt(427), n',
 '            "viewsOnSheet" : NumberInt(1949), n',
 '            "viewsOnSheetWithTemplate" : NumberInt(625), n',
 '            "schedulesOnSheet" : NumberInt(371), n',
 '            "unclippedViews" : NumberInt(876), n',
 '            "createdOn" : ISODate("2017-10-13T18:06:45.291 0000"), n',
 '            "_id" : ObjectId("59e100b535eeefcc27ee0802")n',
 '        }, n',
  

Я перепробовал все разные методы и решения, представленные в read_json / https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_json.html
и загрузка / loads(str) и т.д., Но ничего.

Ответ №1:

Проблема заключалась в формате файла JSON, который мы тестировали с https://jsonformatter.curiousconcept.com / и измените с помощью регулярного выражения, если у вас есть предложения получше, дайте мне знать.

импорт повторно

 with open("views3.json", "r ") as read_file:
   data = read_file.read()
   x = re.sub("w ((. ))", r'1', data)
   print(x)
  

прочитанный файл.закрыт

Ответ №2:

вы этого хотите?: используйте modul json для чтения file.json

 import pandas as pd
import json

with open('file.json') as viewsmc:
   data = json.load(viewsmc)
print data #you have a dict

df = pd.DataFrame(data)
print(df)
  

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

1. Большое спасибо, Френчи, я ценю твою помощь, да, я импортирую эти библиотеки, и я также пробовал это, но это не сработало. (Сообщение об ошибке было: Ожидаемое значение: строка 2, столбец 13 (символ 15)) ‘

2. Итак, еще кое-что: на самом деле ваш экспорт не очень хорош (я полагаю, из mongodb), если вы уберете ObjectId, NumberInt и так далее, Все в порядке… ЕСЛИ ваша коллекция mongo не включает NumberInt, а mongoexport создает документ json, который включает NumberInt, это ошибка. вы могли бы проверить свой json здесь

3. Еще раз спасибо, Франчи, как я могу сделать мой файл .json редактируемым для регулярных выражений?