ListAccounts-JSON-Array-Daten sind nicht konsistent formatiert (im Vergleich zu ListReceivedByAccount)

Wenn ich eine ListAccounts-Abfrage durchführe, erhalte ich Folgendes:

  {
  "result": {
    "": 0.0,
    "account": 0.0,
    "account3": 0.0,
    "account7": 0.0
  },
  "error": null,
  "id": "1"
}

Allerdings ListReceivedByAccount(0, true); sieht aus wie das:

  {
   "result": [
     {
       "account": "",
       "amount": 0.0,
       "confirmations": 0
     },
     {
       "account": "account",
       "amount": 0.0,
       "confirmations": 0
     },
     {
       "account": "account3",
       "amount": 0.0,
       "confirmations": 0
     },
     {
       "account": "account7",
       "amount": 0.0,
       "confirmations": 0
     }
   ],
   "error": null,
   "id": "1"

Beachten Sie, wie die eingebetteten Array-Daten unterschiedlich formatiert sind? Gibt es einen Namen oder Begriff, der diese unterschiedlichen Array-Formate beschreibt (benannt oder unbenannt)?

Warum ist es anders und kann dies in einer zukünftigen Version behoben werden?

Wenn es in einer zukünftigen Version behoben wird, wird die äußerste Eigenschaft "id" zu "2", damit ich die Logik zu meinen Parsern hinzufügen kann?

Ich habe ursprünglich dafür gestimmt, dieses Thema zu schließen, weil ich dachte, es sei kein Thema (Frage nach JSON-Datentypen), aber es ist spezifisch genug für Bitcoin, dass ich diese Abstimmung zurückziehen würde, wenn ich könnte.
@StephenGornick Ich habe eine Bearbeitung vorgenommen, damit Sie die Ablehnung entfernen können.

Antworten (1)

Die JSON-Datenstruktur unterstützt Listen (Arrays).

Im ersten API-Befehl (ListAccounts) ist der Ergebnisinhalt ein Objekt, das einen String enthält. Innerhalb dieser Zeichenfolge befindet sich eine Reihe von Datensätzen, von denen jeder ein Schlüssel/Wert-Element ist.

In der zweiten (ListReceivedByAccount) ist der Ergebnisinhalt ein Array von Objekten, von denen jedes Kontodaten enthält.

Das erscheint inkonsistent, wo vielleicht der erste Aufruf auch ein Array hätte zurückgeben sollen.

Als Faustregel gilt jedoch, dass sich bestehende APIs nicht ändern sollten. Sie können veraltet sein und ersetzt werden, aber es wird erwartet, dass sich ein Aufruf konsistent verhält.

Der Bitcoin-Client ist ein Open-Source-Projekt und daher kann ein Issue-Ticket für diese Inkonsistenz geöffnet und ein Pull-Request mit der Quelle für einen neuen API-Aufruf eingereicht werden. Ob ein solches Problem mit dem Client zusammengeführt wird, hängt von einer Reihe von Faktoren ab, einschließlich der Schwere des Problems.

Persönlich bezweifle ich, dass eine einfache Inkonsistenz der Datenstruktur übernommen würde, aber wenn der ListAccounts-API-Aufruf jemals überarbeitet werden muss, ist es wahrscheinlich, dass der Ersatzaufruf (wieder unter einem anderen Namen) die Änderung enthält, sodass diese Inkonsistenz nicht mehr besteht.
Ein Teil meiner Frage ist, dass das äußerste "id" -Element ... eine Art Versionierung für die API ist. Alle JSON-Ergebnisse haben dies als "1". Vielleicht sollte eine neue Version des Arrays oder neu hinzugefügte Typen "2" zurückgeben? NEIN?
Diese ID ist dieselbe, die Ihr Client gesendet hat. JSON-RPC-Antworten spiegeln nur die Anfrage-ID.