Forum Discussion
Converting JSON record to table issue
Hi all,
I am having an issue converting a JSON response to a table.
Here is my query (URLs and authorization removed for confidentiality):
let
uri1 = "",
url ="{
""syncedInstanceUri"":"&uri1&
"}",
WebPageSourceFunc = () => Json.Document(Web.Contents("", [Headers=[Authorization="Basic", #"Content-type"="application/json"], Content=Text.ToBinary(url)])),
Ssource = Function.InvokeAfter (WebPageSourceFunc, #duration(0,0,0,1)),
uri2 = Ssource[uri],
WebPageSourceFunction = () => Json.Document(Web.Contents(""&uri2&"/data?limit=50", [Headers=[Authorization="Basic"]])),
Sasource = Function.InvokeAfter (WebPageSourceFunction, #duration(0,0,0,1)),
items = Sasource[items],
#"Converted to Table" = Table.FromList(items, Splitter.SplitByNothing(), null, null, ExtraValues.Ignore),
#"Expanded Column1" = Table.ExpandRecordColumn(#"Converted to Table", "Column1", {"ActivityId", "ActivityType", "ActivityDate", "ContactId", "IpAddress", "VisitorId", "VisitorExternalId", "EmailRecipientId", "AssetType", "AssetName", "AssetId", "SubjectLine", "EmailWebLink", "CampaignId", "ExternalId", "DeploymentId", "EmailSendType", "EmailAddress", "ContactIdExt"}, {"Column1.ActivityId", "Column1.ActivityType", "Column1.ActivityDate", "Column1.ContactId", "Column1.IpAddress", "Column1.VisitorId", "Column1.VisitorExternalId", "Column1.EmailRecipientId", "Column1.AssetType", "Column1.AssetName", "Column1.AssetId", "Column1.SubjectLine", "Column1.EmailWebLink", "Column1.CampaignId", "Column1.ExternalId", "Column1.DeploymentId", "Column1.EmailSendType", "Column1.EmailAddress", "Column1.ContactIdExt"})
in
#"Expanded Column1"This gives me the exact table that I need within the query, without any issues.
However, when I try to apply the query changes, I get the following error:
The field "items" of the record wasn't found.
Any idea on how to solve the issue?
Thanks,
Ugur
8 Replies
- ArulSuper User
Hi Anonymous ,
You can directly get the tables from the edit queries windows itself. After getting the data you can get the data you wanted from the edit queries windows itself.
Regards,
-Arul
- AnonymousNot applicable
Hi Arul,
Thanks for the answer, but I am not sure if I got it correctly.
The query already generates the table I require, no problem there. But when I try to apply the query changes, I got the error I mentioned.
Can you please a little bit more explain?
Thanks,
Ugur
- ArulSuper User
Hi Anonymous ,
You can get some ideas and able to solve this problem with the help of this link,
https://www.c-sharpcorner.com/article/generate-power-bi-reports-from-data-in-json-file/
Thanks,
-Arul
- AnonymousNot applicable
Any ideas all?
Thanks,
Ugur
- gooranga1Power Participant
Have you tried editing the script you have to remove the expanded column line and then go and manually see what columns there are to expand? See if that at least gives you somnething with no errors that you can apply? It might be an error with one of the rows json maybe?
let uri1 = "", url ="{ ""syncedInstanceUri"":"&uri1& "}", WebPageSourceFunc = () => Json.Document(Web.Contents("", [Headers=[Authorization="Basic", #"Content-type"="application/json"], Content=Text.ToBinary(url)])), Ssource = Function.InvokeAfter (WebPageSourceFunc, #duration(0,0,0,1)), uri2 = Ssource[uri], WebPageSourceFunction = () => Json.Document(Web.Contents(""&uri2&"/data?limit=50", [Headers=[Authorization="Basic"]])), Sasource = Function.InvokeAfter (WebPageSourceFunction, #duration(0,0,0,1)), items = Sasource[items], #"Converted to Table" = Table.FromList(items, Splitter.SplitByNothing(), null, null, ExtraValues.Ignore), in #"Converted to Table"- AnonymousNot applicable
Hi gooranga1,
No luck..
I believe it applies the query after converting to table, and then unable to find in this step Source[items], since the query starts reading the code after "IN".
However, I couldn't stilll figure out how to fix.
Best regards,
Ugur
- gooranga1Power Participant
hi have you tried this? It sounds like there is no data being returned if the error message says it can't find items?
let uri1 = "", url ="{ ""syncedInstanceUri"":"&uri1& "}", WebPageSourceFunc = () => Json.Document(Web.Contents("", [Headers=[Authorization="Basic", #"Content-type"="application/json"], Content=Text.ToBinary(url)])), Ssource = Function.InvokeAfter (WebPageSourceFunc, #duration(0,0,0,1)), uri2 = Ssource[uri], WebPageSourceFunction = () => Json.Document(Web.Contents(""&uri2&"/data?limit=50", [Headers=[Authorization="Basic"]])), Sasource = Function.InvokeAfter (WebPageSourceFunction, #duration(0,0,0,1)), items = Sasource[items] in uri1