Learn from the best! Meet the four finalists headed to the FINALS of the Power BI Dataviz World Championships! Register 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.
A new Power BI DataViz World Championship is coming this June! Don't miss out on submitting your entry.
Share feedback directly with Fabric product managers, participate in targeted research studies and influence the Fabric roadmap.