Registro JSON con nombres de columna duplicados: DataFormat.Error: nombre duplicado ‘valor’.

Un usuario Pregunto ✅

AndyB

Hola,

Estoy intentando llamar a una API a través de una función personalizada en PowerBI. Funciona bien para la mayoría de las llamadas a la API en el informe, sin embargo, tengo problemas con la tabla final que necesito crear.

Estoy llamando a una API desde nuestro sistema de monitoreo PRTG, esto se llama dos veces antes, para obtener las «ID de dispositivo» y las «ID de sensor». La tabla de ID de sensor es donde invoco la función personalizada que he incluido a continuación, completando el parámetro ID con la columna ID en Sensor ID;

(id as text, sdate as text, edate as text) =>

let
    Source   = Json.Document(Web.Contents("https://PRTGSERVERNAME.REDACTED.com/",[RelativePath="api/historicdata.json?id=&avg=84600&sdate=&edate=&username=&passhash=",Query=[id=id,sdate=sdate,edate=edate,username="REDACTED",passhash="REDACTED"]])),
sensors = Source[sensors]
 in 
    Source

Cuando se ejecuta, todas las celdas creadas por la función son «Error», con el código de error «Se produjo un error en la consulta ». DataFormat.Error: nombre duplicado ‘valor'».

Ejecuté la llamada a la API en cartero y creo que entiendo el problema, pero no cómo resolverlo: el JSON que se devuelve (ver más abajo) tiene varias columnas llamadas «valor»

¿Hay alguna forma de cambiar el nombre de todas las columnas (o algunas de ellas al menos) para que la consulta pase y luego pueda transformarlas más a partir de ahí? No puedo expandirlos como resultado del error resultante de los nombres de las columnas.

{
    "prtg-version": "20.3.60.1623",
    "treesize": 28,
    "histdata": [
        {
            "datetime": "1/31/2021 11:30:00 PM - 11:00:00 PM",
            "datetime_raw": 44228.9583333333,
            "value": "20 msec",
            "value_raw": 20.4038,
            "value": "16 msec",
            "value_raw": 16.1791,
            "value": "28 msec",
            "value_raw": 27.8521,
            "value": "<1 %",
            "value_raw": 0.0363,
            "value": "0 %",
            "value_raw": 0.0000,
            "coverage": "100 %",
            "coverage_raw": 10000
        },
    ]
}

Edhans

No veo una forma de hacer esto. Parece que el formato no es JSON válido. Incluso cuando elimino manualmente los nombres duplicados, el siguiente error es este:

edhans_0-1615822828388.png

Entonces, en el mejor de los casos, ese archivo parece ser «json-ish» pero no un verdadero archivo JSON. Quizás alguien más versado en esquemas JSON pueda intervenir, pero parece que tendrá que volver al sistema de origen y arreglarlo.

AndyB

En respuesta a Edhans

Hola @edhans

Gracias por una respuesta rápida, muy apreciada.

Debería haber pensado en solucionar el problema agregándolo como un archivo json, ¡mi culpa! Creo que al fragmento JSON que envié originalmente le faltaba el segundo corchete; ¡lo agregué ahora a mi publicación original!

Si elimino los nombres de columna duplicados, me funciona (ahora que he incluido el cierre]). ¿Hay alguna forma de abordar el problema de la columna en Power Query forzándolo a cambiar el nombre o algo por el estilo?

jsonexample.png

Edhans

En respuesta a AndyB

El problema @AndyB es con un JSON, toda esta sección viene como un registro y cada campo tiene un nombre:

edhans_1-1615829642194.png

Entonces, en Power Query se ve así:

edhans_0-1615829595615.png

Power Query ni siquiera puede abrirlo para analizarlo en un registro con los campos Value / Value_Raw duplicados. Entonces no creo que su JSON esté siguiendo los estándares. Esos deben cambiarse de nombre en JSON o crearse como registros separados dentro del registro principal. Estructuras JSON | Tutorial JSON | w3resource

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *