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

Get Fabric Certified for FREE during Fabric Data Days. Don't miss your chance! Request 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
Fabric Data Days Carousel

Fabric Data Days

Advance your Data & AI career with 50 days of live learning, contests, hands-on challenges, study groups & certifications and more!

October Power BI Update Carousel

Power BI Monthly Update - October 2025

Check out the October 2025 Power BI update to learn about new features.

FabCon Atlanta 2026 carousel

FabCon Atlanta 2026

Join us at FabCon Atlanta, March 16-20, for the ultimate Fabric, Power BI, AI and SQL community-led event. Save $200 with code FABCOMM.