Convert JSON to Table and Query Specific Value

I have the following JSON array:
{"views":[{"Name":"A","Conf":"High","View":"Negative"}, {"Name":"B","Conf":"Low","View":"Negative"}, {"Name":"C","Conf":"Low","View":"Negative"}]}
How can I convert it to Table? Also, how can I query a specific row of the table? (Example: Find value of "Conf" where Name is "C.)
So far I have:
jsonData = '{"views":[{"Name":"A","Conf":"High","View":"Negative"}, {"Name":"B","Conf":"Low","View":"Negative"}, {"Name":"C","Conf":"Low","View":"Negative"}]}'
structData = jsondecode(jsonData);

 采纳的回答

jsonData = '{"views":[{"Name":"A","Conf":"High","View":"Negative"}, {"Name":"B","Conf":"Low","View":"Negative"}, {"Name":"C","Conf":"Low","View":"Negative"}]}'
jsonData = '{"views":[{"Name":"A","Conf":"High","View":"Negative"}, {"Name":"B","Conf":"Low","View":"Negative"}, {"Name":"C","Conf":"Low","View":"Negative"}]}'
structData = jsondecode(jsonData)
structData = struct with fields:
views: [3×1 struct]
structDataTable = struct2table(structData.views)
structDataTable = 3×3 table
Name Conf View _____ ________ ____________ {'A'} {'High'} {'Negative'} {'B'} {'Low' } {'Negative'} {'C'} {'Low' } {'Negative'}
structDataTable.Name
ans = 3×1 cell array
{'A'} {'B'} {'C'}
structDataTable.Conf{[structDataTable.Name{:}]=='C'}
ans = 'Low'

8 个评论

Thanks Florian . Can you please also suggest how to query specific row in the table/struct? Example : Find value of "Conf" where Name is "C.
structDataTable.Conf{[structDataTable.Name{:}]=='C'}
Can I please check how to query data for a string value? It works with 'C' but throw an error when I try the following code:
structDataTable.Conf{[structDataTable.Name{:}]=='Cat'};
Error: Matrix dimensions must agree.
Ah yes sorry, you need to use strcmp as follows :
structDataTable.Conf{strcmp([structDataTable.Name(:)],'Cat')};
Thanks, it works when there is a match. However, it throws an error when it cant find a match.
Error : Unable to perform assignment with 0 elements on the right-hand side.
How can I handle this?
when you affect your value, first check if it's empty or not:
if ~isempty(structDataTable.Conf{strcmp([structDataTable.Name(:)],'Cat')})
value = structDataTable.Conf{strcmp([structDataTable.Name(:)],'Cat')};
else
value = nan;
end
sorry, I am getting "Unable to perform assignment with 0 elements on the right-hand side." on the following line.
if ~isempty(structDataTable.Conf{strcmp([structDataTable.Name(:)],'Cat')})

请先登录,再进行评论。

更多回答(0 个)

类别

在 帮助中心 和 File Exchange 中查找有关 Characters and Strings 的更多信息

产品

版本

R2018a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by