JSON::TreeToVector
Description
Convert a Tree branch into vector. This is part of JSON class due to the fact that the tree here is made from a JSON string
Syntax
BOOL TreeToVector( TreeNode & tree, vectorbase & vv, LPCSTR lpcszTagName = NULL )
Parameters
- tree
- [input] this tree must be created by FromString
- vv
- [output] the resulting vector, string or numeric
- lpcszTagName
- [input] to get values from an array member with the name specified.
Return
FALSE return if Tree is not a valid format with _0, _1 type of tag names
Examples
EX1
//assume new project with an empty worksheet
void odata()
{
string strURL = "https://services.odata.org/TripPinRESTierService/People";
string result;
int err = okutil_http_get(strURL, &result);
if( err != 0 ) {
out_int("err = ", err);
return;
}
Tree tr;
if(!JSON.FromString(tr, result))
return;
//out_tree(tr);
vector<string> saFields = { "UserName", "LastName", "FirstName", "Gender", ", emails"};
//", emails" so that ", " will be used as separator for multiple values
Worksheet wks = Project.ActiveLayer();
wks.SetSize(-1, saFields.GetSize());
vector<string> vs;
for(int ii = 0; ii < saFields.GetSize(); ii++) {
JSON.TreeToVector(tr.value, vs, saFields[ii]);
Column ca = wks.Columns(ii);
ca.PutStringArray(vs);
}
}
Remark
For using lpcszTagName to get array member, that member itself might be another array, and in such case, Origin supports the following special cases:
1. To get value into a string array, then the member array values will be concatenated. You can even specify a separator by putting into the lpcszTagName. For example, see the odata sample code. The emails field may have one or more emails, and by using tag name as ", emails", then the ", " portion will be used as separator between the multiple emails.
2. To get numberic values, only the first will be obtained. This is useful for many JSON files that the member array holds only one value.
See Also
JSON::FromString
header to Included
origin.h
|