2016-06-09 18 views
0

Ich versuche json.loads zu verwenden, um Daten in einer Redshift-Datenbanktabelle zu analysieren. Ich habe die Funktion entfernt, um in einem Python-Skript zu testen, und habe Schwierigkeiten zu verstehen, was passiert.Welches Format muss die Dateneingabe für Pythons json.loads haben?

Der Code Ich verwende ist:

import json 
j="'['Bars', 'American (Traditional)', 'Nightlife', 'Restaurants']'" 

def trythis(item, reverse): 
    if not j: 
     return '1' 
    try: 
     arr = json.loads(j) 
    except ValueError: 
     return '2' 
    if not ascending: 
     arr = sorted(arr, reverse=True) 
    else: 
     arr = sorted(arr) 
    return json.dumps(arr) 

print trythis(j, True) 

Und das 2 zurückkehrt.

Ich habe versucht, die Eingabevariable auf j="['Bars', 'American (Traditional)', 'Nightlife', 'Restaurants']" zu ändern, aber das hat nicht funktioniert. In welchem ​​Format muss mein Eingabewert sein?

+0

Ah danke. Würden Sie etwas wie "str.replace" empfehlen, um die inneren einfachen Anführungszeichen in doppelte Anführungszeichen zu setzen? – simplycoding

+0

Ich würde nur die Verwendung von einfachen Anführungszeichen für doppelte Anführungszeichen wechseln. Es ist weniger verwirrend für jeden, der Ihren Code liest. –

+1

Sie sollten nicht versuchen, JSON von Hand zu erstellen, es gibt eine Reihe von Details, die Sie wahrscheinlich nicht richtig erhalten werden. Verwenden Sie eine Bibliotheksfunktion, die JSON aus einer Datenstruktur wie 'json.dumps()' erstellt. – Barmar

Antwort

1

Ihre Eingabezeichenfolge j ist kein gültiger JSON. JSON lässt die Verwendung von einfachen Anführungszeichen (') nicht zu, um Zeichenfolgenwerte zu bezeichnen.

Versuchen Sie, die Zitate vermittlungs '["Bars", "American (Traditional)", "Nightlife", "Restaurants"]'

Die JSON-Spezifikation ist eine hervorragende Ressource zu bestimmen, ob Ihre Eingabe ist gültig JSON. Sie können es hier finden: http://www.json.org/

+0

Danke. Die Daten sind eigentlich kein JSON-Format, aber ich konnte die einfachen Anführungszeichen einfach durch doppelte Anführungszeichen auf der SQL-Seite ersetzen, bevor ich die Funktion verwendete. Nicht der beste Weg, aber alles, was ich brauche, ist etwas, das funktioniert. – simplycoding