I am trying to extract a value from a json String which is occurred many times in the String.In my code i am getting only the last occurrence of that String.I am posting my json String and java code
public class JsonDemo{
public static void main(String args[])
// let's read
readJson("book.json");
}
public static void readJson(String file) {
JSONParser parser = new JSONParser();
try {
System.out.println("Reading JSON file from Java program");
FileReader fileReader = new FileReader(file);
JSONObject json = (JSONObject) parser.parse(fileReader);
for(int i=0;i<json.size();i++){
String title = (String) json.get("title");
System.out.println("title: " + title);
}
/* String title = (String) json.get("title");
String author = (String) json.get("author");
Long price = (Long) json.get("price");
System.out.println("author: " + author);
System.out.println("price: " + price);
JSONArray characters = (JSONArray) json.get("characters");
Iterator i = characters.iterator();
System.out.println("characters: ");
while (i.hasNext()) {
System.out.println(" " + i.next());
}*/
} catch (Exception ex) {
ex.printStackTrace();
}
}
This is my json String
[{jobId=501, candidateId=11824, intAvailability=[{"title":"Phone","start":"2015-10-18T00:00:00.000Z","end":"2015-10-18T02:00:00.000Z"},{"title":"Phone","start":"2015-10-19T00:00:00.000Z","end":"2015-10-19T02:00:00.000Z"},{"title":"Phone","start":"2015-10-20T00:00:00.000Z","end":"2015-10-20T02:00:00.000Z"},{"title":"On site","start":"2015-10-25T00:00:00.000Z","end":"2015-10-25T02:00:00.000Z"},{"title":"On site","start":"2015-10-26T00:00:00.000Z","end":"2015-10-26T02:00:00.000Z"},{"title":"On site","start":"2015-10-27T00:00:00.000Z","end":"2015-10-27T02:00:00.000Z"},{"title":"On site","start":"2015-10-28T00:00:00.000Z","end":"2015-10-28T02:00:00.000Z"}], appliedIntOrWorkedWithClient=No, otherOppoWithEmployer=No, inhibitYourAbility=}, {jobId=501, candidateId=12201, intAvailability=[{"title":"Phone","start":"2015-10-31T00:00:00.000Z","end":"2015-10-31T01:30:00.000Z"},{"title":"Phone","start":"2015-11-01T00:00:00.000Z","end":"2015-11-01T01:30:00.000Z"},{"title":"Phone","start":"2015-11-02T00:00:00.000Z","end":"2015-11-02T01:30:00.000Z"},{"title":"On site","start":"2015-11-03T00:00:00.000Z","end":"2015-11-03T01:30:00.000Z"},{"title":"On site","start":"2015-11-04T00:00:00.000Z","end":"2015-11-04T01:30:00.000Z"},{"title":"On site","start":"2015-11-05T00:00:00.000Z","end":"2015-11-05T01:30:00.000Z"},{"title":"On site","start":"2015-11-06T00:00:00.000Z","end":"2015-11-06T01:30:00.000Z"}], appliedIntOrWorkedWithClient=No, otherOppoWithEmployer=No, inhibitYourAbility=}]
I am getting only the "Man Potter and Half Blood Prince" value ,but i want both "Harry Potter and Half Blood Prince " and "Man Potter and Half Blood Prince"
Please refer to the discussion: https://esdiscuss.org/topic/json-duplicate-keys
Basically, JSON RFC suggests interpreters to reject such case or just return the last one, which is what you have obtained.
Why don't you try with gson library.
public class Reader {
public static void main(String[] args) {
try {
JsonReader reader = new JsonReader(new FileReader("path_to _ur_jsonfile.json"));
reader.beginObject();
while (reader.hasNext()) {
String name = reader.nextName();
if (name.equals("author")) {
System.out.println(reader.nextString());
} else if (name.equals("title")) {
System.out.println(reader.nextString());
} else if (name.equals("price")) {
System.out.println(reader.nextDouble());
} else if (name.equals("characters")) {
reader.beginArray();
while (reader.hasNext()) {
String chart = reader.nextString();
System.out.println(chart);
}
reader.endArray();
} else {
reader.skipValue();
}
}
reader.endObject();
reader.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Output :
J. K. Rolling
Harry Potter and Half Blood Prince
20.0
Harry
Ron
Hermoinee
Man Potter and Half Blood Prince
download http://www.java2s.com/Code/JarDownload/gson/gson-2.2.2.jar.zip
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.