Извлечение значений из вложенного файла JSON - PullRequest
1 голос
/ 16 мая 2019

Я пытаюсь извлечь значения из датчиков качества воздуха, чтобы они отображались на устройстве. Я не могу извлечь вложенные значения датчиков температуры, влажности и PM. Как получить их как отдельные ключи и значения?

Я установил pandas ant и попробовал другое решение:

import pandas as pd

url = 'http://192.168.0.117/data.json'
df = pd.read_json(url, orient='columns')

print (df)

и

import urllib.request, json
with urllib.request.urlopen("http://192.168.0.117/data.json") as url:
    data = json.loads(url.read().decode())
    print (data)

Я получаю список значений:

{
  "software_version": "NRZ-2018-123B",
  "age": "28",
  "sensordatavalues": [
    {
      "value_type": "SDS_P1",
      "value": "18.40"
    },
    {
      "value_type": "SDS_P2",
      "value": "10.33"
    },
    {
      "value_type": "temperature",
      "value": "9.50"
    },
    {
      "value_type": "humidity",
      "value": "99.90"
    },
    {
      "value_type": "samples",
      "value": "1753691"
    },
    {
      "value_type": "min_micro",
      "value": "80"
    },
    {
      "value_type": "max_micro",
      "value": "793061"
    },
    {
      "value_type": "signal",
      "value": "-73"
    }
  ]
}

Как получить их как отдельные переменные?

Ответы [ 2 ]

0 голосов
/ 16 мая 2019

Поздравляю с началом работы с python!Это отличный инструмент для анализа данных.

Butterfly Knife прав, json_normalize - хороший инструмент для использования здесь.

Я попробовал это локально:

import urllib.request
import json 
import pandas as pd 
from pandas.io.json import json_normalize 

sample_data = '{"software_version": "NRZ-2018-123B", "age":"28", "sensordatavalues":[{"value_type":"SDS_P1","value":"18.40"},{"value_type":"SDS_P2","value":"10.33"},{"value_type":"temperature","value":"9.50"},{"value_type":"humidity","value":"99.90"},{"value_type":"samples","value":"1753691"},{"value_type":"min_micro","value":"80"},{"value_type":"max_micro","value":"793061"},{"value_type":"signal","value":"-73"}]}'

y = json.loads(sample_data)
y2 = json_normalize(y["sensordatavalues"])

Это пример данныхтеперь у2, датафрейм выглядит следующим образом:

# >>> y2
#      value   value_type
# 0    18.40       SDS_P1
# 1    10.33       SDS_P2
# 2     9.50  temperature
# 3    99.90     humidity
# 4  1753691      samples
# 5       80    min_micro
# 6   793061    max_micro
# 7      -73       signal
0 голосов
/ 16 мая 2019

Вам нужно сгладить JSON, прежде чем читать его пандам.json_normalize кажется, что вам нужно.Вот учебник по нему:

https://www.kaggle.com/jboysen/quick-tutorial-flatten-nested-json-in-pandas

...