Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Learn from the best! Meet the four finalists headed to the FINALS of the Power BI Dataviz World Championships! Register now

Reply
Syndicate_Admin
Administrator
Administrator

M Query Post REST API, devuelve formato no JSON con Expression.Error

Estoy intentando un POST a una API REST que debería devolver datos en JSON. Sin embargo, POST parece tener éxito, ya que recibe un Expression.Error al intentar convertir la respuesta en binaria. ¿Se puede modificar esta consulta para devolver los datos como JSON y no convertirlos en binarios? Supongo que es algo con la línea 31. Gracias de antemano.

Expression.ErrorExpression.ErrorExpresión.Error

Toda la consulta M

Screenshot 2023-10-26 at 7.27.24 AM.png

18 REPLIES 18
Syndicate_Admin
Administrator
Administrator

Creo que el problema no está en la respuesta. El \u000a parece provenir de la sección de datos que tiene formato JSON que estamos tratando de PUBLICAR en la API REST. La API debería devolver algo totalmente diferente.

Syndicate_Admin
Administrator
Administrator

no, estoy buscando un texto de respuesta de muestra con el \u000a etc.

Syndicate_Admin
Administrator
Administrator

¿Es esto lo que estás buscando? Las variables forman una dirección URL https completa para el punto de conexión. Captura de pantalla 1. A continuación, publicamos algunos datos JSON en el punto de conexión. Captura de pantalla 2.

Screenshot 2023-10-30 at 3.58.46 PM.png

Screenshot 2023-10-31 at 12.52.45 PM.png

A continuación, debería devolver datos JSON. Por el aspecto de Expression.Error, parece que son datos que estoy publicando que está tratando de convertir primero a binario. Me pregunto si el "Content=Text.FromBinary" es el culpable. No creo que haya un equivalente a "Text.FromJSON".

Syndicate_Admin
Administrator
Administrator

¿Puede publicar un ejemplo de resultado de Web.Contents?

Syndicate_Admin
Administrator
Administrator

Ya, sigo recibiendo el Expression.Error como antes.

Syndicate_Admin
Administrator
Administrator

Lo siento, error tipográfico de nuevo. Pantalla diminuta. Pruebe este

WebResult = Web.Contents("https://" & Tenant & GetMetric, [Headers=[Authorization=AccessTokenHeader, Accept="application/json"], Content=Text.FromBinary(Json.FromValue(data))]),
GetJsonQuery = Json.Document(Text.Replace(Text.Replace(WebResult,"\u000a",""),"\""",""""))

Syndicate_Admin
Administrator
Administrator

Eso nos devuelve al punto de partida 1. ¿Hay algo en esa línea que esté intentando convertir el JSON devuelto en binario?

Screenshot 2023-10-30 at 4.14.49 PM.png

Syndicate_Admin
Administrator
Administrator

Sí, no me di cuenta de que lo habías quitado.

 GetJsonQuery = Json.Document(Web.Contents("https://" & Tenant & GetMetric, [Headers=[Authorization="AccessTokenHeader", Accept="application/json"], Content=Text.FromBinary(Json.FromValue(data))]))
Syndicate_Admin
Administrator
Administrator

Ese muestra un error 405. Creo que eso podría deberse a que intenta OBTENER vs. PUBLICAR sin la pieza de contenido.

Screenshot 2023-10-30 at 3.58.46 PM.png

Syndicate_Admin
Administrator
Administrator

GetJsonQuery = Json.Document(Web.Contents("https://" & Tenant & GetMetric, [Headers=[Authorization=AccessTokenHeader, Accept="application/json"]]))
Syndicate_Admin
Administrator
Administrator

let
data = "{
        ""object_type"": ""device"",
        ""metric_category"": ""ssl_server"",
        ""metric_specs"": [
                {
                ""name"": ""connected""
                }
            ],
        ""object_ids"": ""[8589939089]"",
        ""cycle"": ""auto"",
    }",


 // Concatenates the Consumer Key & Consumer Secret and converts to base64
  authKey = "Basic " & Binary.ToText(Text.ToBinary(#"API ID" & ":" & #"API Secret"),0),
  url = "https://" & #"Tenant" & #"Token URL",
 // Uses the oauth2/token method to obtain a bearer token
 GetJson = Web.Contents(url,
     [
         Headers = [#"Authorization"=authKey,
                    #"Content-Type"="application/x-www-form-urlencoded"],
         Content = Text.ToBinary("grant_type=client_credentials") 
     ]
 ),
 FormatAsJson = Json.Document(GetJson),
 // Gets token from the Json response
 AccessToken = FormatAsJson[access_token],
 AccessTokenHeader = "Bearer " & AccessToken,
 // Uses the POST method using the bearer token from the previous POST oauth2/token method
 // GetJsonQuery = Json.Document(Web.Contents("https://" & #"Tenant" & #"GetMetric", [Headers=[Authorization=AccessTokenHeader, #"accept"="application/json"], Content=Text.FromBinary(Json.FromValue(data))]))
 GetJsonQuery = Json.Document(Web.Contents("https://" & Tenant & GetMetric, [Headers=[Authorization="AccessTokenHeader", Accept="application/json"]]))
in
    GetJsonQuery
Syndicate_Admin
Administrator
Administrator

Por favor, muestre el código actual.

Syndicate_Admin
Administrator
Administrator

Al cambiarlo a eso, se muestra un error de solicitud incorrecta (400) en su lugar.

Syndicate_Admin
Administrator
Administrator

Pruebe esto.

 GetJsonQuery = Json.Document(Web.Contents("https://" & Tenant & GetMetric, [Headers=[Authorization=AccessTokenHeader, Accept="application/json"], Content=Text.FromBinary(Json.FromValue(data))]))

También deberá leer sobre RelativePath y Query.

Syndicate_Admin
Administrator
Administrator

Se agregó la aceptación y aún se observa el mismo Expression.Error.

 GetJsonQuery = Json.Document(Web.Contents("https://" & #"Tenant" & #"GetMetric", [Headers=[Authorization=AccessTokenHeader, #"accept"="application/json"], Content=Text.FromBinary(Json.FromValue(data))]))
Syndicate_Admin
Administrator
Administrator

Intente agregar una directiva accept.

Syndicate_Admin
Administrator
Administrator

Gracias @lbendlin . Sin embargo, cambié la línea 31 para incluir un tipo de contenido, todavía veo Expression.Error. No estoy seguro de qué es tring para convertir a binario, ya que la respuesta debería ser json. ¿Alguna idea?

GetJsonQuery = Json.Document(Web.Contents("https://" & #"Tenant" & #"GetMetric", [Headers=[Authorization=AccessTokenHeader, #"Content-Type"="application/json"], Content=Text.FromBinary(Json.FromValue(data))]))
Syndicate_Admin
Administrator
Administrator

La respuesta es JSON, solo un poco desordenado. \u000a es un salto de línea. \" es una comilla doble, etc. Puede hacer que se pueda usar con un par de reemplazos.

De todos modos, en sus encabezados puede especificar qué tipo de contenido acepta. Intente establecerlo en application/JSON.

Helpful resources

Announcements
Power BI DataViz World Championships carousel

Power BI DataViz World Championships - June 2026

A new Power BI DataViz World Championship is coming this June! Don't miss out on submitting your entry.

Join our Fabric User Panel

Join our Fabric User Panel

Share feedback directly with Fabric product managers, participate in targeted research studies and influence the Fabric roadmap.

March Power BI Update Carousel

Power BI Community Update - March 2026

Check out the March 2026 Power BI update to learn about new features.

Top Kudoed Authors