Advance your Data & AI career with 50 days of live learning, dataviz contests, hands-on challenges, study groups & certifications and more!
Get registeredGet Fabric Certified for FREE during Fabric Data Days. Don't miss your chance! Request now
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.ErrorExpresión.Error
Toda la consulta M
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.
no, estoy buscando un texto de respuesta de muestra con el \u000a etc.
¿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.
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".
¿Puede publicar un ejemplo de resultado de Web.Contents?
Ya, sigo recibiendo el Expression.Error como antes.
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",""),"\""",""""))
Eso nos devuelve al punto de partida 1. ¿Hay algo en esa línea que esté intentando convertir el JSON devuelto en binario?
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))]))
Ese muestra un error 405. Creo que eso podría deberse a que intenta OBTENER vs. PUBLICAR sin la pieza de contenido.
GetJsonQuery = Json.Document(Web.Contents("https://" & Tenant & GetMetric, [Headers=[Authorization=AccessTokenHeader, Accept="application/json"]]))
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
Por favor, muestre el código actual.
Al cambiarlo a eso, se muestra un error de solicitud incorrecta (400) en su lugar.
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.
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))]))
Intente agregar una directiva accept.
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))]))
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.
Advance your Data & AI career with 50 days of live learning, contests, hands-on challenges, study groups & certifications and more!
Check out the October 2025 Power BI update to learn about new features.