I have a JSON array
{
"people":[
{
"id": "8080",
"content": "foo"
},
{
"id": "8097",
"content": "bar"
}
]
}
How would I search for 8097 and get the content?
I have a JSON array
{
"people":[
{
"id": "8080",
"content": "foo"
},
{
"id": "8097",
"content": "bar"
}
]
}
How would I search for 8097 and get the content?
decode your json as array and iterate it as any array as flowing:
$json_decoded= json_decode($json,true);
$tab="t";
foreach ($json_decoded as $key => $val) {
echo "Article ".$val["key"]."n" ;
echo $tab."Authors :n";
foreach ($val["data"]["authors"] as $key => $author){
echo $tab.$tab. ($key+1) ." - ".$author["firstName"]. " ".$author["lastName"]."n";
}
echo $tab."Article Title: ".$val["data"]["articleTitle"] ."n";
echo $tab."Publication Title: ".$val["data"]["pubTitle"] ."n";
echo $tab."Key: ".$val["key"]."n";
}
and you can use the same method for xml as flowing:
$xml = simplexml_load_string($xmlstring);
$json = json_encode($xml);
$json_decoded = json_decode($json,TRUE);
//the rest is same
for xml you can use the SimpleXml's functions or DOMDocument class
to know the structure of your data that api return to you after it converted to array use var_dump($your_decoded_json)
in debuging
So VBA.CallByName also accesses elements in an array as well as find the array's length
'Tools->References->
'Microsoft Script Control 1.0; {0E59F1D2-1FBE-11D0-8FF2-00A0D10038BC}; C:WindowsSysWOW64msscript.ocx
Private Sub TestJSONParsingArrayWithCallByName()
Dim oScriptEngine As ScriptControl
Set oScriptEngine = New ScriptControl
oScriptEngine.Language = "JScript"
Dim sJsonString As String
sJsonString = "[ 1234, 2345 ]"
Dim objJSON As Object
Set objJSON = oScriptEngine.Eval("(" + sJsonString + ")")
'* Using VBA.CallByName we get the length of the array
Dim lLength As Long
lLength = VBA.CallByName(objJSON, "length", VbGet)
Debug.Assert lLength = 2
'* Believe or not one uses "0","1",.... with callbyname to get an element
Debug.Assert VBA.CallByName(objJSON, "0", VbGet) = 1234
Debug.Assert VBA.CallByName(objJSON, "1", VbGet) = 2345
End Sub
Try echo count($task_array['task']);
In general, if you wonder what the structure of the value of a variable $var
is, do a
<pre><?php var_export($var, true); ?></pre>
Advantage of this function over alternatives such as serialize
and print_r
is, that it prints PHP code (and is thus readable by anyone who understands PHP (which is likely if you program in PHP)). Disadvantage of var_export
is, that it cannot handle circular structures (e.g. if $a->b == $a
), but neither can JSON.
Once you've retrieved the response from the API (using AsyncTask
), take the response text and create a JSONArray
. Then you can loop through the array and extract the categories.
public void onApiResponse(String response) {
// Create a JSONArray from the response
JSONArray jsonArray = new JSONArray(response);
// Create a structure to store all of the categories
List<Category> categories = new ArrayList<Category>();
// Loop through the array and parse all the categories
for (int i = 0; i < jsonArray.length(); i++) {
// Extract the JSONObject from the index
JSONObject jsonCategory = jsonArray.getJSONObject(i);
// Add the category to the list
categories.add(Category.fromJSON(jsonCategory));
}
// Do something with your categories...
}
EDIT: I see you hardcoded some values into your fromJSON
, so I thought I'd post a corrected version of that as well.
public static Category fromJSON(JSONObject jsonObject) {
try {
Category category = new Category();
category.mCategoryID = jsonObject.getInt("id");
category.mCategoryName = jsonObjectgetString("name");
return category;
} catch (JSONException e) {
e.printStackTrace();
return null;
}
}
Use the
json_decode
function to convert the JSON string to an array of object, then iterate through the array until the desired object is found: