Unable to parse JSON array with son simple - java

ANYTIME I try to parse a file containing a JSON Array with JSON Simple, I end up getting this error message ... code always seems fine in examples but I still get this EVERYTIME I try something ! . please help !
Exception in thread "main" java.lang.ClassCastException:
class org.json.simple.JSONObject cannot be cast to class java.lang.String (org.json.simple.JSONObject is in unnamed module of loader 'app';
java.lang.String is in module java.base of loader 'bootstrap')
an example of an example from this site that still didn't work
JSONParser jsonParser = new JSONParser();
//Parsing the contents of the JSON file
try (Reader reader = new FileReader("example-member-list.json")) {
JSONObject jsonObject = (JSONObject) jsonParser.parse(new FileReader("example-member-list.json"));
JSONArray jsonArray = (JSONArray) jsonObject.get("members");
//Iterating the contents of the array
Iterator<String> iterator = jsonArray.iterator();
while(iterator.hasNext()) {
System.out.println(iterator.next());
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

The problem is with this line.
Iterator<String> iterator = jsonArray.iterator();
JSONArray iterator returns JsonObject Iterator.
Change the above line to
Iterator<JSONObject> iterator = jsonArray.iterator();
Please note that json-simple is not actively maintained. So if you are learning about JSON parsing, I would suggest to check out Google's GSON library (link below).
https://github.com/google/gson

Related

Modifying nested JSONObject using json simple

Trying to modify values of a JSONObject within another JSONbject throws cannot find symbol error for method getJSONObject...
I can't use the getJSONObject method, a workaround for me was:
JSONObject Player = (JSONObject) PlayerTemp.get("Player");
Player.put("Language", "German");
However the following would not work:
JSONObject Player = PlayerTemp.getJSONObject("Player");
Here is my whole code example where I try to modify a value within a JSONObject that's nested within another JSONObject:
JSONParser parser = new JSONParser();
try (Reader reader = new FileReader("../resources/PlayerTemp.json")) {
JSONObject PlayerTemp = (JSONObject) parser.parse(reader);
PlayerTemp.getJSONObject("Player").put("Language", "German");
System.out.println(PlayerTemp.get("Player").toString());
} catch (IOException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
}
}
}
error: cannot find symbol
PlayerTemp.getJSONObject("Player").put("Language", "German");
^
There is no method called getJSONObject in JSONObject class, so you have to use get() with explicit type casting. If you want more advance methods like getJSONObject consider using Gson and jackson
JSONObject PlayerTemp = (JSONObject) parser.parse(reader);
JSONObject temp = (JSONObject) PlayerTemp.getJSONObject("Player");
temp.put("Language", "German");

How to use JENA APIs to read data from an owl file

I have tried to write a code that prints the desired contents from an owl file. Here is my code:
public String execute()
{
OntModel m = ModelFactory.createOntologyModel( OntModelSpec.OWL_MEM );
// get an OntClass reference to one of the classes in the model
// note: ideally, we would delegate this step to Jena's schemagen tool
InputStream in = null;
try {
in = new FileInputStream("C:/OOAD-Softwares/workspace4/SemWeb/build/src/main/resources/semrailwaysv2.owl");
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} // or any windows path
m.read(in, null);
OntClass ontclass = m.getOntClass(SOURCE_URL+"#RailwayStation");
ExtendedIterator iterator = ontclass.listInstances();
while(iterator.hasNext())
{
Object obj = iterator.next();
System.out.println("Object : "+obj.toString());
}
try {
in.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return SUCCESS;
}
Here I am able to get the number of instances of the desired class from my owl file by directly using the listInstances() method as an iterator without assigning, but I am unable to get the various property values for each instance. How should I proceed to do this? Also if I use the parameterized version of ExtendedIterator,
ExtendedIterator<OntClass> it = ontclass.listInstances();
is giving an error saying
The type ExtendedIterator is not generic; it cannot be parameterized with arguments <OntClass>
How should I proceed?
Edit
I have updated the code, still same problem.

string value to JSON object in java but No value for

response
deneme2="{\"NUKE_USER_NO\":\"1494\",\"WEB_PIN\":\"metin\",\"CARI_NO\":\"2611\",\"FIRMA_ADI\":\"\",\"CARI_UNVANI\":\"LTDSTI\",\"MOD\":\"Müşteri\",\"RENK\":\"'#fbbb5e'\",\"EMAIL\":\"yok\",\"SAHIS_NO\":\"9\",\"ADISOYADI\":\"Metin\",\"YETKILER\":\"UrunListesi, KampanyaList, YeniUrunler, SepetListe, SiparisTakip, BekleyenSiparisler, TaksitBilgi, TaksitliOdeme, CariEkstre, HavaleEftBildir, BankaHesapNumaralari, PcShirbazi, IadeTalep, IadeSonuclari, GarantiSorgulama, ArizaTakip, UyelikBilgilerim, KullaniciList, SevkAdres, CariHareketler, BorcAlacakDurumu, AlisAnalizi, AlisCirolari, BABS, StandartFormlar, ArizaIadeProseduru, SevkiyatProseduru, Organizasyon, Iletisim, SiparisVerme, GuvenliOdeme3D, MailOrderOranlari, KargoTakip, FiyatMod, AnaSayfa, MusteriTemsilcisiniGorsun, Ihaleler, Puanlarim, UyeIsyeri, IadeDegerlendir, IadeSonucDepo\",\"CARI_TIP_NO\":\"6\",\"AKTIF_SEPET\":\"197\",\"KAR_MARJI\":\"0\",\"ODEME_NO\":\"21\",\"DOVIZ_BIRIMI\":\"USD\",\"NAKLIYE_TIP_NO\":\"11\",\"ROLE_ADI\":\"Bayi\"}";
Java code
public JSONObject stringToJson(String deneme2)
{
JSONObject json= new JSONObject();
try {
json.getString(deneme2);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return json;
}
and then error and exception. It doesn't change string value JSONObject
http://i.stack.imgur.com/roVu5.png
Firstly:
JSONObject json= new JSONObject();
is not taking the actual String which need to be converted.
public JSONObject stringToJson(String deneme2)
{
JSONObject json= new JSONObject(deneme2); //pass a String here
try {
json.getString("key name"); //key for which you need to retrieve data
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return json;
}
Hope it helps.
deneme2 is string value and deneme2 is JSON writing format. and then i sent deneme2 stringToJson function for string to JSON object bu return exceptation in image and null json.
Try this it will help you : Firstly convert above String to json object
JSONObject jsonobject = new JSONObject(deneme2);
try {
String abc = json.getString("NUKE_USER_NO");
Log.i("Log", abc);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

Cannot be converted to JSON

I am reading some JSON from with in an Android App, yet it will not recognise the following JSON
{"value":"1000","make":"Ford","model":"Focus","desc":"1.9 Zetec","Fuel":"petrol"}
This is output generated from a PHP file on a webserver. Is there something wrong with this JSON or is the problem with the following code?
try {
JSONArray jArray = new JSONArray(result);
JSONObject json_data=null;
for(int i=0;i<jArray.length();i++){
json_data = jArray.getJSONObject(i);
String car_value = json_data.getString("value");
Log.e("JSON",car_value);
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Given String is not a Json Array. That is Json Object. So parse with Json object.
like below
try {
JSONObject jObject = new JSONObject(result);
String value = jObject.getString("value");
String make = jObject.getString("make");
// TODO and so on
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
The json data you are receiving is not a JSONArray. It is a JSONObject. So, you should receive it as:
JSONObject jArray = new JSONObject(result);
And then if you want value you can get it like
String car_value = jArray.getString("value");

Error Parse JSON Response String Android

I have a response String from an API service like this :
{"id":"login","status":"true"}
and This is the way to parse Response String to get Value from Key "Status"
JSONObject jsonObj = null;
try{
jsonObj = new JSONObject(responseString);
}
catch(JSONException e){
e.printStackTrace();
}
JSONArray innerJsonArray = null;
try {
innerJsonArray = jsonObj.getJSONArray("status");
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
JSONObject jsonObject = null;
try {
jsonObject = innerJsonArray.getJSONObject(0);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
System.out.println(jsonObject.getString("status"));
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
and I've got error
"org.json.JSONArray cannot be converted to JSONObject"
Anyone can give me suggestion?
JSONObject jsonObj = null;
try{
jsonObj = new JSONObject(responseString);
System.out.println(jsonObj.getString("status"));
}
catch(JSONException e){
e.printStackTrace();
}
You do not need to bother with any other arrays.
In which line you get the exception ? In any way may be you should use
jsonObj =JSONObject.fromObject(responseString);
Kindly try the snippet code below. Try this link for gaining better knowledge about parsing an JSON response.
JSONObject jObj;
try {
jObj = new JSONObject(responseString);
Log.i("id==", jObj.getString("id"));
Log.i("status==", jObj.getString("status"));
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

Categories