Ich habe die Ergebnisse von Google Speech in einer Variablen erhalten

data = {'name': '1235433175192040985', 'metadata': {'@type': 'type.googleapis.com/google.cloud.speech.v1.LongRunningRecognizeMetadata', 'progressPercent': 100, 'startTime': '2018-04-11T12:56:58.237060Z', 'lastUpdateTime': '2018-04-11T12:57:44.944653Z'}, 'done': true, 'response': {'@type': 'type.googleapis.com/google.cloud.speech.v1.LongRunningRecognizeResponse', 'results': [{'alternatives': [{'transcript': 'hi how are you', 'confidence': 0.92438406}]}, {'alternatives': [{'transcript': 'How are you doing?', 'confidence': 0.9402676}]}]}}

json_dict = json.loads(data)

Darauf wirft es Fehler

JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)

Für den Rest des Parsens habe ich geschrieben

for result in json_dict["response"]["results"]:
  if "alternatives" in result:
    alternatives = result["alternatives"][0]
    if "confidence" in alternatives:
      print(alternatives["confidence"])
    if "transcript" in alternatives:
      print(alternatives["transcript"])

Was mache ich falsch?

0
user9316498 18 Apr. 2018 im 13:35

3 Antworten

Beste Antwort

Das Diktat benötigt keine weiteren json-Methoden, Sie können so wie es ist damit arbeiten.

for result in data["response"]["results"]:
  if "alternatives" in result:
    alternatives = result["alternatives"][0]
    if "confidence" in alternatives:
      print(alternatives["confidence"])
    if "transcript" in alternatives:
      print(alternatives["transcript"])

Ergibt diese Ausgabe:

0.92438406
hi how are you
0.9402676
How are you doing?
0
Chris Decker 18 Apr. 2018 im 17:00

Der JSON-Parser in Python erwartet, dass Ihr Blob doppelte Anführungszeichen verwendet, da dies der JSON-Standard ist.

{
  "name": "John Doe"
}

Sie können die einfachen Anführungszeichen durch doppelte Anführungszeichen ersetzen, wie unter dieser Antwort erläutert.

Ich bin mir jedoch ziemlich sicher, dass das Problem an anderer Stelle gelöst werden kann, da die Google-API höchstwahrscheinlich gültiges JSON in ihren Antworten verwendet. Wie analysieren Sie die Antwort von der Google-API?

0
Sander Laarhoven 18 Apr. 2018 im 10:56

Das Problem in Ihrem Snippet ist, dass Sie ein Diktat an json.loads übergeben. json.loads dekodiert json zum Diktieren, so dass es redundant und falsch ist. Lesen Sie die Dokumente

0
Nitzan M 18 Apr. 2018 im 11:49