Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst Verschachteltes JSON in CSV umwanden

Mitglied: humpe99

humpe99 (Level 1) - Jetzt verbinden

12.11.2019 um 21:30 Uhr, 209 Aufrufe, 6 Kommentare

Hallo zusammen,

Das folgende JSON-File sollte in ein CSV-File umgewandelt werden:

01.
{
02.
    "results": [
03.
        {
04.
            "statement_id": 0,
05.
            "series": [
06.
                {
07.
                    "name": "measurements",
08.
                    "columns": [
09.
                        "time",
10.
                        "node",
11.
                        "sensor",
12.
                        "unit",
13.
                        "value"
14.
                    ],
15.
                    "values": [
16.
                        [
17.
                            "2019-11-12T18:32:33.416Z",
18.
                            "4462",
19.
                            "sensirion-sht35-humidity",
20.
                            "%",
21.
                            94.4609750514992
22.
                        ],
23.
                        [
24.
                            "2019-11-12T18:32:33.416Z",
25.
                            "4462",
26.
                            "sensirion-sht35-temperature",
27.
                            "°C",
28.
                            -1.5537499046311112
29.
                        ],
30.
                        [
31.
                            "2019-11-12T18:33:04.583Z",
32.
                            "2699",
33.
                            "sensirion-sht35-humidity",
34.
                            "%",
35.
                            98.73502708476387
36.
                        ],
37.
                        [
38.
                            "2019-11-12T18:33:04.583Z",
39.
                            "2699",
40.
                            "sensirion-sht35-temperature",
41.
                            "°C",
42.
                            -3.2173647669184433
43.
                        ]
44.
                    ]
45.
                }
46.
            ]
47.
        }
48.
    ]
49.
}
Schlussendlich soll das etwa so aussehen:

01.
time,node,sensor,unit,value
02.
2019-11-12T18:32:33.416Z,4462,sensirion-sht35-humidity,%,94.4609750514992
03.
2019-11-12T18:32:33.416Z,4462,sensirion-sht35-temperature,°C,-1.5537499046311112
04.
2019-11-12T18:33:04.583Z,2699,sensirion-sht35-humidity,%,98.73502708476387
05.
2019-11-12T18:33:04.583Z,2699,sensirion-sht35-temperature,°C, -3.2173647669184433
Das ganze muss mit Python erfolgen - und meine Erfahrung mit Python ist übersichtlich bis inexistent. Mit Google habe ich einige Ansätze gefunden - die aber in meinem Fall alle daran scheitern, dass das JSON-File verschachtelt ist...

Danke für jeden Input!

Gruss, Humpe
Mitglied: 141861
12.11.2019, aktualisiert um 22:16 Uhr
Hallo,

ein JSON File besteht ja letztendlich nur aus Text den man simple parsen kann.
Die Standardbibliothek von Python enthält sogar einen JSON Parser. Einfacher gehts nicht mehr.

https://www.w3schools.com/python/python_json.asp

Falls du es immer noch nicht hinbekommen solltest, dann bitte mal dein Code posten.

VG
Bitte warten ..
Mitglied: SeaStorm
12.11.2019 um 22:16 Uhr
Hi

und was genau hast du da bisher gemacht?
Kann ja nicht viel sein. Python hat mit seiner JSON library es so einfach gemacht wie es nur geht.
Was du da machen willst braucht wohl keine 20 Zeilen in Python
Bitte warten ..
Mitglied: Fennek11
12.11.2019, aktualisiert um 23:33 Uhr
Mit Powershell:
01.
$Con = get-content C:\Users\xxxx\Desktop\Admin.json.txt | Convertfrom-Json
02.
$Ret = $f[1].results
03.
$ser = $Ret[0].series
04.
foreach ($v in $ser[0].values) {
05.
    Write-Host ($v)
06.
    }
Bitte warten ..
Mitglied: humpe99
13.11.2019 um 09:00 Uhr
Danke! Auf den JSON-Parser bin ich auch bereits gestossen. Mein Script sieht folgendermassen aus:

01.
#!/usr/local/bin/python
02.
import json
03.
import csv
04.

05.
def get_leaves(item, key=None):
06.
    if isinstance(item, dict):
07.
        leaves = []
08.
        for i in item.keys():
09.
            leaves.extend(get_leaves(item[i], i))
10.
        return leaves
11.
    elif isinstance(item, list):
12.
        leaves = []
13.
        for i in item:
14.
            leaves.extend(get_leaves(i, key))
15.
        return leaves
16.
    else:
17.
        return [(key, item)]
18.

19.

20.
with open('input.json') as f_input, open('output.csv', 'w') as f_output:
21.
    csv_output = csv.writer(f_output)
22.
    write_header = True
23.

24.
    for entry in json.load(f_input):
25.
        leaf_entries = sorted(get_leaves(entry))
26.

27.
        if write_header:
28.
            csv_output.writerow([k for k, v in leaf_entries])
29.
            write_header = False
30.

31.
        csv_output.writerow([v for k, v in leaf_entries])
Das Resultat sieht dann so aus:
01.
""
02.
results
… ähnelt also nur sehr entfernt dem gewünschten Resultat …

Ich habe auch einfachere Scripts ausprobiert:

01.
#!/usr/local/bin/python
02.
import csv, json, sys
03.

04.
inputFile = open('input.json') #open json file
05.
outputFile = open('output.csv', 'w') #load csv file
06.

07.
data = json.load(inputFile) #load json content
08.
inputFile.close() #close the input file    
09.
  
10.
output = csv.writer(outputFile) #create a csv.write    
11.
output.writerow(data[0].keys())  # header row    
12.
  
13.
for row in data:
14.
   output.writerow(row.values()) #values row
Da gab es dann folgende Fehlermeldung:

01.
[home] $ python json_to_csv.py
02.
Traceback (most recent call last):
03.
  File "json_to_csv.py", line 11, in <module>
04.
    output.writerow(data[0].keys())  # header row
05.
KeyError: 0
Ich möchte als mildernden Umstand die Tatsache ins Feld führen, dass ich alle paar Schaltjahre mal was Kleines programmieren muss und es sich um meinen ersten Kontakt mit Python überhaupt handelt...

Danke weiterhin für jede Hilfe!
Bitte warten ..
Mitglied: 141815
LÖSUNG 13.11.2019, aktualisiert um 10:27 Uhr
Ein und Ausgabedatei in den Open-Anweisungen anpassen feddich.
01.
#!/usr/local/bin/python
02.
import csv, json
03.

04.
inputFile = open('test.json') #open json file
05.
outputFile = open('test.csv', 'w') #load csv file
06.

07.
data = json.load(inputFile) #load json content
08.
inputFile.close() #close the input file    
09.
  
10.
output = csv.writer(outputFile) #create a csv.write    
11.
output.writerow(data['results'][0]['series'][0]['columns'])
12.
  
13.
for row in data['results'][0]['series'][0]['values']:
14.
   output.writerow(row)
15.

16.
outputFile.close()
Bitte warten ..
Mitglied: humpe99
13.11.2019 um 11:57 Uhr
Danke für den Vorschlag! Sofort umgesetzt, leider noch nicht ganz erfolgreich, die folgende Fehlermeldung ist aufgetreten.

01.
[home] $ python j2c.py
02.
Traceback (most recent call last):
03.
  File "j2c.py", line 9, in <module>
04.
    strCSV += ";".join(str(e) for e in itm) + "\r\n"
05.
  File "j2c.py", line 9, in <genexpr>
06.
    strCSV += ";".join(str(e) for e in itm) + "\r\n"
07.
UnicodeEncodeError: 'ascii' codec can't encode character u'\xb0' in position 0: ordinal not in range(128)
Ich habe dem Code dann noch den folgenden Abschnitt vorangestellt:

01.
import sys
02.
reload(sys)
03.
sys.setdefaultencoding('utf8')
...und es geht!

Danke für die Unterstützung!!!
Bitte warten ..
Ähnliche Inhalte
Entwicklung
Json, Powershell und Arrays
gelöst Frage von SunnyRainyDayEntwicklung6 Kommentare

Moin Zusammen, Mit Sicherheit gibt es hier jemanden der mir mit meinem Powershell-Problem behilflich sein kann :) Ich stehe ...

PHP
Json zu unleserlich
gelöst Frage von WPFORGEPHP2 Kommentare

Hallo, ich muss von folder1/test.php zu folder2/test.php weiterleiten. Dabei enthält der ankommende Request sowohl header daten als auch einen ...

Entwicklung
JSON "wenn.dann" integrieren
Frage von greeny95Entwicklung3 Kommentare

Hallo zusammen, ich sitze gerade an der Spaltenformatierung in SharePoint mit JSON Bisher habe ich eine JSON Formatierung mit ...

Python

Python requests JSON Objekt + Bild versenden

gelöst Frage von nullacht15Python4 Kommentare

Hi, ich hatte vor einigen Tagen schon mal eine Frage gestellt, die mir hier auch wunderbar beantwortet wurde ). ...

Neue Wissensbeiträge
Internet

(NetzDG) .und Ihr heult über Limux in München, schon gehört, was die SPD vor hat?

Information von certifiedit.net vor 1 TagInternet8 Kommentare

Na dann, Gute Nacht Bürgerrechte. Wofür dann eigentlich die DS-GVO? Ich bezeichne mich als Polizist und hol mir einfach ...

Sicherheit

Chrome 79 übermittelt eingegebene Kennwörter nach Hause

Information von DerWoWusste vor 3 TagenSicherheit16 Kommentare

Ab sofort warnt Chrome standardmäßig Nutzer davor, wenn aus Leaks bekannte Passwörter zum Einsatz kommen. Beim Besuch einer Website, ...

Viren und Trojaner
Trend Micro WFBS 10 SP1 Patch 2185
Tipp von Abramelin vor 4 TagenViren und Trojaner3 Kommentare

Hi, Hab gerade gesehen das Patch 2185 für TM WFBS 10 SP1 erschienen ist! Werde mal Morgen den Patch ...

Viren und Trojaner

Neuer Virus lässt Windows im abgesicherten Modus starten

Tipp von transocean vor 4 TagenViren und Trojaner7 Kommentare

Moin, lest selbst. Grüße Uwe

Heiß diskutierte Inhalte
Windows 7
Windows 7 - Ein DSL Speedtest - Mehrere Browser - Unterschiedliche Ergebnisse
gelöst Frage von AusAltwirdNeuWindows 725 Kommentare

Hallo zusammen, mein PC hat zwei Rj45 Anschlüsse. Beide sind auf Gigabit Vollduplex eingestellt. An beiden Anschlüssen erreiche ich ...

DSL, VDSL
Fritz Box 7490 Internettelefonie
Frage von daveshuterDSL, VDSL13 Kommentare

Tach zusammen, ich bin gerade dabei meine neue Fritzbox (7490) für den Einsatz in meinem privaten Netz einzustellen (DSL ...

LAN, WAN, Wireless
UniFi AP AC Pro wenig Durchsatz
Frage von matze2090LAN, WAN, Wireless11 Kommentare

Hallo, ich habe mir zwei UniFi AP AC Pros gekauft, da sie eine sehr gute Rezzesion haben. Ich habe ...

Batch & Shell
Wort aus String "herrausschneiden", FileOpenDialog
Frage von Bruno8500Batch & Shell9 Kommentare

Ich bin gerade dabei ein CMD Skript zu schreiben für folgende Anwendung: Wenn man bei DHL eine Online Frankierung ...