How to read a value of a key from JSONstring - java

Below is the json data:
"headers": [
{
"name": "date",
"value": "Tue, 13 Mar 2018 12:44:55 GMT"
},
{
"name": "content-encoding",
"value": "gzip"
},
{
"name": "last-modified",
"value": "Tue, 06 Mar 2018 20:15:30 GMT"
},
{
"name": "server",
"value": "Apache"
},
{
"name": "vary",
"value": "Accept-Encoding"
},
{
"name": "content-type",
"value": "text/html"
},
{
"name": "status",
"value": "200"
}]
my requirement is to capture date, content-encoding, last-modified, server and status from the above json using java
i am using json-sample-1.1.1 version
can some one please assist how to get these values

Or if you prefer Java 8 you can use it by this way.
JSONParser parser = new JSONParser();
JSONObject jsonObject = (JSONObject)parser.parse("{\"headers\":[{\"name\":\"date\",\"value\":\"Tue, 13 Mar 2018 12:44:55 GMT\"},{\"name\":\"content-encoding\",\"value\":\"gzip\"},{\"name\":\"last-modified\",\"value\":\"Tue, 06 Mar 2018 20:15:30 GMT\"},{\"name\":\"server\",\"value\":\"Apache\"},{\"name\":\"vary\",\"value\":\"Accept-Encoding\"},{\"name\":\"content-type\",\"value\":\"text/html\"},{\"name\":\"status\",\"value\":\"200\"}]}");
JSONArray headers = (JSONArray)jsonObject.get("headers");
headers.forEach( header -> {
JSONObject headerJsonObject = (JSONObject)header;
if(headerJsonObject.get("name").equals("content-encoding")){
System.out.println(headerJsonObject.get("value"));
}
// continue
});

Iterate over the array, compare names, and retrieve it's value
String contentencoding = null;
JSONArray headers = new JSONArray(yourHeadersJsonString);
for ( int n = 0; n < headers.length(); n++ )
{
if ( headers[n].name.equals("content-encoding") )
{
contentencoding = headers[n].value;
break;
}
}

JSONObject jsonObject=new JSONObject(response);
JSONArray jsonArray=jsonObject.getJSONArray("array_name");
then start loop to the size of jsonarray and get the values by using methods like getString("key_name") of JSONObject

Related

Want to read JSONArray with JSONObject, but got the error A non-empty JSON Pointer

My Json FILE (it´s an array! )
[
{
"datasetid": "country-flags",
"recordid": "d661d0a8676bf4d7563114c1d9c465987df22132",
"fields": {
"num_un": 32,
"geolocation": [
-38.416097,
-63.616672
],
"dialing_code": "54",
"a3_un": "ARG",
"country": "Argentina",
"flag": {
"mimetype": "image/png",
"format": "PNG",
"filename": "ar.png",
"width": 16,
"id": "fceb4235ce95c8597bfa77d0db0181a0",
"height": 11,
"thumbnail": true
},
"a2_iso": "AR"
},
"geometry": {
"type": "Point",
"coordinates": [
-63.616672,
-38.416097
]
},
"record_timestamp": "2016-09-26T07:48:38.162+02:00"
},
more...
]
So i want to get the value from coordinates. So for this i tried to work with this:
JsonReader jsonReader = Json
.createReader(new FileReader(getClass().getResource("country-flags.json").getPath()));
JsonArray arr = jsonReader.readArray();
for(int i = 1; i<arr.size();i++)
{
JsonObject obj = arr.getJsonObject(i);
System.out.println("coordinates: " + obj.containsKey("\"coordinates\""));
System.out.println("##########");
System.out.println(obj.getValue("\"coordinates\""));
}
But i got the error:
javax.json.JsonException: A non-empty JSON Pointer must begin with a
'/'
Can someone help me out ?!
Your code obj.containsKey("\"coordinates\"") will return false as coordinates is NOT a top level key, but is a 2nd level (nested) key. If you print obj.keySet(), you will get [datasetid, recordid, fields, geometry, record_timestamp] (first / top level keys only).
If the structure of your JSON is fixed, you can use the following code:
for(int i = 1; i<arr.size();i++)
{
JsonObject obj = arr.getJsonObject(i);
JsonObject jsonChildObject = obj.getJsonObject("geometry");
if(jsonChildObject.containsKey("coordinates"))
System.out.println(jsonChildObject.getValue("/coordinates"));
}
Notice the / in front of the getValue method's coordinates param. I think that was the reason you were here in the first place.

how to get elements from JSONObject and write it to file

i have a following JSONObject
{"elements": [
{
"name": "StartLabelFormat",
"value": "^XA"
},
{
"name": "shipperAddressLine1",
"value": "Street1",
"format": {"Text": {
"orientation": "N",
"height": "28",
"width": 20,
"fontname": 0,
"y": 373,
"x": 20
}}
},
{
"name": "EndLabelFormat",
"value": "^XZ"
}
]}
Now i want to get element from this Object and write it to a file.
For Example, for this block
{
"name": "shipperAddressLine1",
"value": "Street1",
"format": {"Text": {
"orientation": "N",
"height": "28",
"width": 21,
"fontname": 0,
"y": 373,
"x": 20
}}
},
I want to write in file as
^FT 20, 373 ^A0N, 28, 21 ^FDStreet1^FS.
Please help me to do this.
How to do it ?
If you meet {} in your code , you can use JSONObject to parse it .
If you meet [] in your code , you can use JSONArray to parse it .
And if you meet [] in your code , you can use for loop to get value in it .
And you should use try catch in your code .
Try this in your code .
try {
JSONObject jsonObject = new JSONObject(response);
JSONArray elements = jsonObject.getJSONArray("elements");
for (int i = 0; i < elements.length(); i++) {
JSONObject jsonObject1 = elements.getJSONObject(i);
String name = jsonObject1.optString("name");
String value = jsonObject1.optString("value");
JSONObject format = jsonObject1.optJSONObject("format");
JSONObject Text = format.optJSONObject("Text");
String orientation = Text.optString("orientation");
String height = Text.optString("height");
String width = Text.optString("width");
}
} catch (JSONException e) {
e.printStackTrace();
}
Note
And use optString and optJSONObject in your code . If format is null ,it will not return error .
And you can judge that JSONArray's length is not 0 and not null in the code .
To get this element from JsonArray
JsonObject yourElement = yourJsonArray.get(index);
Simply, you can use gson library for parsing json to objects.
public class Staff {
private String name;
private String value;
//...
and use Gson
String jsonInString = " {
"name": "shipperAddressLine1",
"value": "Street1"
}";
Staff staff = gson.fromJson(yourElement.toString() , Staff.class);
After that you can write in file by using your custom toString() method inside Staff class.
P.S. to convert JsonObject to String you can use also toString() method.

JSON: Get list of JSON Objects

In java how can I pull out the JSON objects enclosed in the "{}"?
I have tried:
JSONObject obj = new JSONObject(jstring);
obj.getJSONArray("fileName");
But it only return the first object. How do I get a list with both objects?
JSON:
[
{
"fileName": [
"file1"
],
"date": [
"8/25/2015 0:00"
],
"time": [
"7/16/2009 16:51"
],
"id": "1",
"version_": 1
},
{
"fileName": [
"file1"
],
"date": [
"8/25/2015 0:00"
],
"time": [
"7/16/2009 16:51"
],
"id": "1",
"version_": 1
}
]
Your root JSON is an Array, so first create a JSONArray from your String.
Do this:
JSONArray arr = new JSONArray(jstring);
for (int i = 0; i < arr.length(); i++) { // Walk through the Array.
JSONObject obj = arr.getJSONObject(i);
JSONArray arr2 = obj.getJSONArray("fileName");
// Do whatever.
}
For more info, please refer to the docs on JSONArray and JSONObject.
You have to directly construct JSONArray from JSON string in this case.
JSONArray arr = new JSONArray(jstring);
JSONArray jsonArray = new JSONArray(jstring);

Problems parsing JSON in Java

I have this json:
[{
"name": "prog 1",
"show": [{
"name": "n1",
"time": "01.10 "
}, {
"name": "n2",
"time": "01.35 "
}]
}, {
"name": "prog 2",
"show": [{
"name": "n1",
"time": "01.10 "
}, {
"name": "n2",
"time": "01.35 "
}]
}]
Now trying to parse it in Java like:
JSONObject json=new JSONObject(json_str);
throws an Exception, since it doesn't begin with {, but [ since it's an array. I can parse this without problem in js, but aparently I cannot load an JSONArray with this string...
use: JSONArray objArray = new JSONArray (json_str);
// to access the individual objects inside the array:
for(int i=0;i<objArray.length();i++)
{
JSONObject obj = objArray.getJSONObject(i);
}
Have you tried this:
JSONArray arr = new JSONArray(stringWithContent);
Then access it like :
for(int i = 0; i<arr.length();i++){
System.out.println(arr.get(i));
}
You can try following code
JSONObject jObject = new JSONObject(json_str);
JSONArray array = jObject.getJSONArray("show");
for(int i = 0 ; i < array.length() ; i++)
{
System.out.println(array.getJSONObject(i).getString("name"));
System.out.println(array.getJSONObject(i).getString("time"));
}
It will helpful ...

Parsing a JSON object within a JSON object

I have a JSON file which contains an array of item objects:
{
"item": [
{
"title": "TitleA",
"link": "http://www.abc.html?partner=rss&emc=rss",
"guid": {
"-isPermaLink": "true",
"#text": "www.abc.html"
},
"atom:link": {
"-rel": "standout",
"-href": "http://www.abc.html?partner=rss&emc=rss"
},
"media:content": {
"-url": "standard.jpg",
"-medium": "image",
"-height": "75",
"-width": "75"
},
"media:description": "This is the description.",
"media:credit": "Reuters",
"description": "In depth description",
"dc:creator": "By test creator",
"pubDate": "Sun, 21 Oct 2012 11:29:12 GMT",
"category": "World"
},
{
"title": "TitleB",
"link": "http://www.abc.html?partner=rss&emc=rss",
"guid": {
"-isPermaLink": "true",
"#text": "www.abc.html"
},
"atom:link": {
"-rel": "standout",
"-href": "http://www.abc.html?partner=rss&emc=rss"
},
"media:content": {
"-url": "standard.jpg",
"-medium": "image",
"-height": "75",
"-width": "75"
},
"media:description": "This is the description.",
"media:credit": "Reuters",
"description": "In depth description",
"dc:creator": "By test creator",
"pubDate": "Sun, 21 Oct 2012 11:29:12 GMT",
"category": "World"
}
]
}
Now I know how to get the "title", but I don't know how I would access the "-url" within "media:content" for example, since it seems to be a JSON object within the Item object. How would I get this value and assign it to a value in my Item class?
try as to get "-url" within "media:content" from current json string :
JSONObject jsonObject = new JSONObject("Your JSON STRING HERE");
JSONArray jsonArray =jsonObject.getJSONArray("item");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObjectitem=
jsonArray.getJSONObject(i);
// get title or link here
String strtitle=jsonObjectitem.getString("title");
//....get other values in same way
// get media:content json object
JSONObject jsonObjectmediacontent =
jsonObjectitem.getJSONObject("media:content");
// get url,medium,...
String strurl=jsonObjectmediacontent.getString("-url");
//....get other values in same way
}
Write below code to parse -url string, it will solve your problem.
JSONObject mMainJsonObj = new JSONObject("Pass Json Response String Here");
JSONArray mItemJsonArray = mMainJsonObj.getJSONArray("item");
for (int i = 0; i < mItemJsonArray.length(); i++) {
JSONObject mJsonObj1 = mItemJsonArray.getJSONObject(i);
String mTitle = mJsonObj1.getString("title");
String mLink = mJsonObj1.getString("link");
JSONObject mJsonObjGuid = mJsonObj1.getJSONObject("guid");
String mIsPermLink = mJsonObjGuid.getString("-isPermaLink");
String mText = mJsonObjGuid.getString("#text");
JSONObject mJsonObjAtomLink = mJsonObj1.getJSONObject("atom:link");
String mRel = mJsonObjAtomLink.getString("-rel");
String mHref = mJsonObjAtomLink.getString("-href");
JSONObject mJsonObjMediaContent = mJsonObj1.getJSONObject("media:content");
String mUrl = mJsonObjMediaContent.getString("-url");
String mMedium = mJsonObjMediaContent.getString("-medium");
String mHeight = mJsonObjMediaContent.getString("-height");
String mWidth = mJsonObjMediaContent.getString("-width");
}
And see below link for more information.
Json Parsing Example
Solution with Jackson: read your JSON into a JsonNode using an ObjectMapper and retrieve your values like this:
// Since JsonNode implements Iterable of itself and cycles through array elements,
// this works
for (final JsonNode element: node)
doSomethingWith(element.get("media:content").get("-url"));

Categories