How to get values from Json Object in Java? - java

I have stored an Json object in an String variable called output.
Assume,
String output;
This output variable is holding an json object.
below is the json object which output variable is holding.
How can access the price_currency which is in the prices?
"prices": [
{
"price_label": "",
"price_currency": "USD",
"price_wholesale": 32.00,
"price_retail": 70.00,
"price_currency_retail": "USD"
}
],
"deliveries": [{
"delivery_name": "Zappos Holiday",
"delivery_code": "",
"style_display_order": 2,
"season_name": "Holiday",
"season_year" : "2017",
"season_code": "",
"date_cancel": "",
"date_delivery_start": "",
"date_delivery_end": "",
"public": "0",
"style_comments": ""
},

There are many possibilities:
Converting the json in a bean (using libraries like Gson or Faster Jackson)
Converting the json in a Map (always using libraries like Gson or Faster Jackson)
Accessing directly the field you need using a regular expression (very complex)
Writing a parser
Using a library to access directly the field using Json path
Each of the previous possibilities has pro and cons.
For example if you need a particular field but you don't know the structure of the whole document you can use json path.
If you need to manage the whole json as an object to save it locally convert it to a bean.
And so on.

It is super simple, if you use the new javax.json package that was introduced in Java 7:
https://docs.oracle.com/javaee/7/api/javax/json/package-summary.html
Example:
JsonReader jsonReader = Json.createReader(new StringReader(yourString));
JsonArray prices = jsonReader.readArray();
for (JsonValue price : prices){
// ...
}
jsonReader.close();

Firstly you said your response value is a string output, here is the steps of parsing a JSON object in JAVA.
Parse your string value to JSONObject, let me name it jsonRet.
Then parse this
jsonRet.getJSONArray("prices")
This step you also get a JSON array of prices let me call it prices
Foreach the prices array as JSONObject
Then do
price.getString("price_currency")
This step you get a string value, this would be what you want.
For more info, I suggest you search key word Java JSON with Google that would be benefit for your understanding.

in java You have JSONObjet class which You can use in this case.
Some link to java doc --> click

Related

How to convert a JSON to Java object but with translated values

I have a JSON like below and I want to generate the Java object of the respective class by parsing it. The catch is that I don't want the value for maxtime in that object to be set as {{ Instant.MAX.toString()}}, but it should be its translated value, which means it should be +1000000000-12-31T23:59:59.999999999Z. Is there any standard library to achieve this similar requirement or I will have to write a customized code for this?
{
"key1": "",
"key2": "",
"key3": {
"maxTime": "{{ Instant.MAX.toString()}}",
"anotherKey": "{{MyProjectUtils.getKey()}}"
}
}
In the worst case, I am ready to replace this JSON file with some other type of file but at the end, I want a java object with translated values.
You may create a JavaBean/POJO object from a JSON file. You may adjust the members in POJO Object according to the JSON File.
here is how to create a POJO object from a JSON file.

Interpolate JSON values into a string

I am writing an application/class that will take in a template text file and a JSON value and return interpolated text back to the caller.
The format of the input template text file needs to be determined. For example: my name is ${fullName}
Example of the JSON:
{"fullName": "Elon Musk"}
Expected output:
"my name is Elon Musk"
I am looking for a widely used library/formats that can accomplish this.
What format should the template text file be?
What library would support the template text file format defined above and accept JSON values?
Its easy to build my own parser but there are many edge cases that needs to be taken care of and I do not want to reinvent the wheel.
For example, if we have a slightly complex JSON object with lists, nested values etc. then I will have to think about those as well and implement it.
I have always used org.json library. Found at http://www.json.org/.
It makes it really easy to go through JSON Objects.
For example if you want to make a new object:
JSONObject person = new JSONObject();
person.put("fullName", "Elon Musk");
person.put("phoneNumber", 3811111111);
The JSON Object would look like:
{
"fullName": "Elon Musk",
"phoneNumber": 3811111111
}
It's similar to retrieving from the Object
String name = person.getString("fullName");
You can read out the file with BufferedReader and parse it as you wish.
Hopefully I helped out. :)
This is how we do it.
Map inputMap = ["fullName": "Elon Musk"]
String finalText = StrSubstitutor.replace("my name is \${fullName}", inputMap)
You can try this:
https://github.com/alibaba/fastjson
Fastjson is a Java library that can be used to convert Java Objects into their JSON representation. It can also be used to convert a JSON string to an equivalent Java object. Fastjson can work with arbitrary Java objects including pre-existing objects that you do not have source-code of.

How do I convert a LinkedTreeMap to gson JsonObject

For a java data handler, I send properly formatted JSON, but a combination of Spring, Java deciding how to cast what it sees, and frameworks I really shouldn't go changing mangle that JSON so that once I can see it, it's turned into a LinkedTreeMap, and I need to transform it into a JsonObject.
This is not to serialize/de-serialize JSON into java objects, it's "final form" is a gson JsonObject, and it needs to be able to handle literally any valid JSON.
{
"key":"value",
"object": {
"array":[
"value1",
"please work"
]
}
}
is the sample I've been using, once I see it, it's a LinkedTreeMap that .toString() s to
{key=value, object={array=[value1, please work]}}
where you can replace "=" with ":", but that doesn't have the internal quotes for the
new JsonParser().parse(gson.toJson(STRING)).getAsJsonObject()
strategy.
Is there a more direct way to convert LinkedTreeMap to JsonObject, or a library to add the internal quotes to the string, or even a way to turn a sting into a JsonObject that doesn't need the internal quotes?
You'd typically have to serialize the object to JSON, then parse that JSON back into a JsonObject. Fortunately, Gson provides a toJsonTree method that kind of skips the parsing.
LinkedTreeMap<?,?> yourMap = ...;
JsonObject jsonObject = gson.toJsonTree(yourMap).getAsJsonObject();
Note that, if you can, just deserialize the JSON directly to a JsonObject with
gson.fromJson(theJson, JsonObject.class);

Reading from big json data in java

To start off, I'm pretty new in programming. I have to create an Android Weather App for a school project and I'm stuck with this big ass JSON:
JSON Data
Out of this, how would I read the temperature out of every 3 hour interval(example: 9.00-12.00 temperature: 5°C, 12.00-15.00 temperature: 7°C etc.).
So I have an Activity that displays the temperature of the entire day by three hour intervals. Since I have no experience with JSON I have no idea what the certain indexes mean, when does it increment(there are like 8 main: thingies).
DISCLAIMER: I have to use JSON, no GSON or other shortcuts, I have to parse and read certain data from this JSON. I get this JSON from open weather map API so it changes every day.
API
Use volly library for it. You can easily fetch data from json. No async task is needed, if you are using volly library.
First validate the json by going to http://jsonlint.com/. This will help you see the formatted Json string.
Next read up on Json array and Object .
Use AsynTask to get the Json into forecastJsonStr string.
Then you need to convert this forecastJsonStr into JSon object forecastJsonObj
To get weather data in "list" do something similar to
JSONArray weatherArray = forecastJson.getJSONArray("list");
Hope this helps
JSONObject receivedData = new JSONObject("The string that you get as response from the API");
JSONArray weatherList = receivedData.getJSONArray("list");
for(int i=0;i<weatherList.length();i++){
JSONObject data = weatherList.getJSONObjectAt(i);
String date_text - data.getString("dt_txt");
JSONArray weatherData = weatherList.getJSONArray("main");
for(int j=0;j<weatherData.length();j++){
// Here is where you will get all the weather stuff that you need
int temp = weatherData.getInt("temp");
// Similarly other values like temp_min, temp_max
}
}
So basically you need to parse the entire thing. In order to understand the whole structure more clearly use something like http://jsonviewer.stack.hu/ in order to view the JSON in a more clear way so that you know what you need from the JSON data better. Simple copy paste your data into there and click "Format".
JSON is just a name-value pair kind of storage if you see stored like "name":"value". Integer values don't have the "".
Remember all the JSON is stored in { } and a JSON can be nested in a JSON. So in your example if you see, the entire thing is a JSON. Within that you have a "city" key which has a value within { }. So "city" is a JSONObject.
Similarly "coord" is a JSONObject while "cod" is a String and "cnt" is an integer.
There can also be some instances where a name points to an array of JSON objects like "list" over here. JSON Arrays are signified using a [ ]. Enclosed within are JSON objects separated by comma.
Above is a very simple sample to get you started so that you get a jist of what is going on. So play around and try to extract more data from in there.
All the best and Happy Coding :)

compressed json in java

I receive compressed Json as a String in Java. Compressed json is in the format below:
[{
"name": ["alex", "colt", "bolt"],
"pos": ["AUS", "USA", "UAE"]
}]
How I can store the data into bean so that I can then insert it into a database table (in the correct order, e.g. for name : alex then pos = AUS)?
Here is how I compress the Json.
If I send the Json data without compressing it, then it is more than 5 MB. It also takes more time. Compression reduces the size. I am struggling to store the data.
First Step :
Create Bean Class corresponding to JSON , in your scenario your bean class contains 2 data members List<String> names and List<String> position
and their corresponding getters and setters
Second Step :
Use Google's GSON library to convert JSON to Java Object
BufferedReader br = new BufferedReader(
new FileReader("c:\\file.json"));
//convert the json string back to object
YourBeanClass obj = gson.fromJson(br, YourBeanClass.class);
Third Step :
Your bean Object is in your hands enjoy , do whatever you want to do with that !!

Categories

Resources