Wie kann ich JSON solide analysieren?
Die Idee ist, eine Funktion oder ähnliches zu haben, die JSON innerhalb eines Solidity-Vertrags analysieren kann.
Mit einem einfachen JSON-Objekt (nur Schlüsselwert-Strings, wie {'A': 'a', 'B': 'b'}
) sollte die Lösung in der Lage sein, es in eine Zuordnung (String => String) umzuwandeln.
Ich gehe davon aus, dass Sie eine externe Quelle aufrufen möchten, über die Sie keine Kontrolle haben, und dass Sie die Oraclize-Datenquelle json() verwenden, um nur den richtigen Teil des Service-json zu erhalten, der zurückgegeben wird, wenn Sie seine URL aufrufen wie in der Dokumentation Verfügbare Datenquellen von Oraclize angegeben .
Im Moment denke ich, dass Sie keine Möglichkeit haben, Oraclize dazu zu bringen, etwas anderes als einen String zurückzugeben. Das bedeutet, dass Sie den zurückgegebenen Json als String-Parameter Ihrer Oraclize- __callback
Funktion erhalten müssen.
Aber dann müssen Sie, wie Sie fragen, den Json in ein Array parsen. Dies wäre sehr kostspielig, selbst wenn Sie einen Weg finden, dies zu tun.
Die kurze Antwort wäre also, dass das, was Sie verlangen, nicht möglich ist.
Lassen Sie mich jedoch die folgenden, nicht ganz zufriedenstellenden Problemumgehungen vorschlagen. Ich weiß, dass es nur Workarounds sind, die wahrscheinlich nicht Ihren Anforderungen entsprechen, aber ich denke, dass das, was Sie tun möchten, im Moment nicht möglich ist. Versuchen wir also einfach, dem Ziel so nahe wie möglich zu kommen.
Problemumgehungen:
Das Analysieren von Zeichenfolgen wird innerhalb der EVM wahrscheinlich unerschwinglich teuer sein. Warum wollen Sie das Parsen innerhalb der EVM durchführen, wenn Sie es trivialerweise von außen tun und die Daten bereits im richtigen Format übergeben könnten?
Wenn Sie in Ihrem speziellen Beispiel nur eine String->String-Zuordnung laden möchten, können Sie zwei String-Arrays als Parameter übergeben, von denen eines die Schlüssel und das zweite die Werte sind. Ein einfacher for-Zyklus könnte es ohne Parsing-Overhead in ein Solidity-Mapping laden.
Ich weiß, dass diese Frage ziemlich alt ist, aber ich werde trotzdem meine Meinung hinzufügen.
Wenn Ihr JSON klein genug ist, kann es sich lohnen, es on-chain zu parsen, um den Aufwand und die Kosten von zwei oder mehr orchestrierten Aufrufen eines Orakels zu vermeiden. Ich habe gerade die erste Version eines JSON-Parsers für Solidity auf Github veröffentlicht: https://github.com/chrisdotn/jsmnSol
Wenn Sie es verwenden möchten, sollten Sie:
Eine umfassendere Einführung finden Sie auf Medium: https://medium.com/@chrisdotn/a-json-parser-for-solidity-9cc73b4b42
Im Wesentlichen bietet diese Antwort also eine Möglichkeit, Option (2) von Nicolas Antwort zu verwenden.
arodriguezdonaire