Los datos de la matriz ListAccounts JSON no tienen un formato coherente (en comparación con ListReceivedByAccount)

Cuando realizo una consulta de ListAccounts obtengo esto:

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

Sin embargo ListReceivedByAccount(0, true); Se ve como esto:

  {
   "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"

¿Observa cómo los datos de la matriz incrustada tienen un formato diferente? ¿Hay algún nombre o término que describa estos diferentes formatos de matriz (con nombre o sin nombre)?

¿Por qué es diferente y se puede solucionar en una versión futura?

Si se corrige en una versión futura, ¿la propiedad "id" más externa se convertirá en "2" para que pueda agregar la lógica a mis analizadores?

Inicialmente voté para cerrar esto pensando que estaba fuera de tema (preguntando sobre los tipos de datos JSON), pero es lo suficientemente específico para bitcoin que retiraría ese voto si pudiera.
@StephenGornick Hice una edición para que puedas eliminar el voto negativo.

Respuestas (1)

La estructura de datos JSON admite listas (matrices).

En el primer comando API (ListAccounts), el contenido del resultado es un objeto que contiene una cadena. Dentro de esta cadena hay un conjunto de registros de datos, cada uno de los cuales es un elemento clave/valor.

En el segundo (ListReceivedByAccount), el contenido del resultado es una matriz de objetos, cada uno de los cuales contiene datos de cuenta.

Eso parece inconsistente, donde quizás la primera llamada también debería haber devuelto una matriz.

Sin embargo, una regla general es que las API existentes no deben cambiar. Pueden ser obsoletos y reemplazados, pero se espera que una llamada se comporte de manera consistente.

El cliente de Bitcoin es un proyecto de código abierto y, por lo tanto, se puede abrir un ticket de emisión para esta inconsistencia y enviar una solicitud de extracción con la fuente para una nueva llamada API. Si un problema de este tipo se fusiona con el cliente depende de una serie de factores, incluida la gravedad del problema.

Personalmente, dudo que se adopte una simple inconsistencia en la estructura de datos, pero si la llamada API de ListAccounts alguna vez necesita revisión, es probable que la llamada de reemplazo (nuevamente, con un nombre diferente) incorpore el cambio para que esta inconsistencia ya no exista.
Parte de mi pregunta es que el elemento "id" más externo... es que algún tipo de control de versiones para la API... todos los resultados de json tienen eso como "1". ¿Quizás una nueva versión de la matriz o los tipos recién agregados deberían devolver "2"? ¿No?
Esa identificación es la misma que envió su cliente. Las respuestas de JSON-RPC simplemente reflejan la identificación de la solicitud.