Комплекс десериализации JSON с pandas - PullRequest
0 голосов
/ 23 марта 2020

Я пытаюсь десериализовать некоторый комплекс JSON, который также несовместим с pandas, и изо всех сил пытаюсь получить правильный синтаксический анализ

        {
    "STATUS":"REQUEST_OK",
    "DATA":[
    {
     "companyID":"AABBCCDD",
     "ITEMS":[
        {
           "ind":"12345",
           "pt":"1231",
           "code":"E333",
           "name":"Pop ,",
           "RES":[
              {
                 "i":1,
                 "D":{
                    "e":123674,
                    "p":"",
                    "s":"",
                    "t":1000
                 },
                 "lot":"073",
                 "V":[
                    {
                       "t":6,
                       "v":0.1
                    }
                 ],
                 "p":1
              },
              {

              }
           ]
        },
        {
           "ind":"423",
           "pt":"571",
           "code":"E1",
           "name":"Dam ,",
           "RES":[
              {
                 "i":5,
                 "D":{
                    "e":120751,
                    "p":"",
                    "s":"",
                    "t":800
                 },
                 "lot":"9",
                 "V":[
                    {
                       "t":4543,
                       "v":1.33
                    }
                 ],
                 "p":1
              },
              {

              }
           ]
        },
        {
           "ind":"0323",
           "pt":"123221",
           "code":"LS",
           "name":"Paint ,",
           "RES":[
              {
                 "i":61,
                 "D":{
                    "e":946,
                    "p":"",
                    "s":"",
                    "t":11100
                 },
                 "lot":"8",
                 "V":[
                    {
                       "t":9,
                       "v":0.06
                    }
                 ],
                 "p":1
              },
              {

              }
            ]
         }
      ]
   }
 ]
}

Приведенные здесь данные должны создать эту таблицу

 |companyID | ind  |pt   |code |name |i   |e      |p    |s     |t     |lot     |t      |v     |p
 |------------------------------------------------------------------------------------------------
 |AABBCCDD  |12345 |1231 |E333 |Pop  |1   |123674 |     |      |1000  |073     |6      |0.1   |1
 |------------------------------------------------------------------------------------------------
 |----  

И т. Д.

Самая большая боль для меня в том, что этот тег может быть только 1 уровня

           {
           "ind":"423",
           "pt":"571",
           "code":"E1",
           "name":"Dam ,",
           "RES":[
              {

, но внутри него несколько

            {
                 "i":61,
                 "D":{
                    "e":946,
                    "p":"",
                    "s":"",
                    "t":11100
                 },
                 "lot":"8",
                 "V":[
                    {
                       "t":9,
                       "v":0.06
                    }
                 ],
                 "p":1
              },

Пример

i:61 

означает, что в первом теге есть 61 из этих json тегов.

Любые подсказки о том, как проанализировать этот JSON?

1 Ответ

1 голос
/ 24 марта 2020

Попробуйте следующим образом:

data = """your json above"""
import pandas as pd

key = []
value = []
new_dat = data.split(',')
for n in new_dat:
    if '{' in n:
        m = n.split('{')[1].strip()
    else:
        m = n.strip().replace('}','').replace('\n','')
    if ':' in m:
        key.append(m.split(':')[0])
        value.append(m.split(':')[1])

pd.DataFrame([value],columns=key)

Вывод:

       "STATUS"     "companyID"     "ind"   "pt"    "code"  "name"  "i"     "e"     "p"     "s"     ...     "name"  "i"     "e"     "p"     "s"     "t"     "lot"   "t"     "v"     "p"
0   "REQUEST_OK"    "AABBCCDD"  "12345"     "1231"  "E333"  "Pop    1   123674  ""  ""  ...     "Paint  61  946     ""  ""  11100   "8"     9   0.06 ]  1

Затем вы можете использовать стандартные методы pandas для удаления ненужных столбцов, например, c.

...