10

I am getting strange problem while trying to parse a simple json using simple-json by google.

Here is my code which is not working:

String s = args[0].toString();
JSONObject json = (JSONObject)new JSONParser().parse(s);

When I execute, it will give me the exception java.lang.String cannot be cast to org.json.simple.JSONObject

But when I hard code json directly like below its working fine. Wat could be the reason?

JSONObject json = (JSONObject)new JSONParser().parse("{\"application\":\"admin\",\"keytype\":\"PRODUCTION\",\"callbackUrl\":\"qwerewqr;ewqrwerq;qwerqwerq\",\"authorizedDomains\":\"ALL\",\"validityTime\":\"3600000\",\"retryAfterFailure\":true}");

UPDATE

When I print s, it will give me the output below:

"{\"application\":\"admin\",\"keytype\":\"PRODUCTION\",\"callbackUrl\":\"qwerewqr;ewqrwerq;qwerqwerq\",\"authorizedDomains\":\"ALL\",\"validityTime\":\"3600000\",\"retryAfterFailure\":true}"
4
  • 1
    Maybe it's because s was in a wrong format? Or do you get a different error in that case? In your second example, try to put in an invalid JSON string, like "test123" and see the error. Commented Aug 29, 2014 at 11:08
  • 1
    Could you change and debug it with Object obj = new JSONParser().parse(s) instead of JSONObject json = (JSONObject)new JSONParser().parse(s) Commented Aug 29, 2014 at 11:29
  • @aegean yes that is wroking.. thanks i just wondering how could I get print the json elements with it? Commented Aug 29, 2014 at 11:36
  • @PhilippMurry when i am giving "test123" its giving Unexpected character (t) at position 0. Commented Aug 29, 2014 at 11:48

4 Answers 4

7

I ran this through eclipse by providing arguments in run configuration.

 public static void main(String[] args) {
        String s = args[0].toString();
        System.out.println("=>" + s);
        try {
            JSONObject json = (JSONObject) new JSONParser().parse(s);
            System.out.println(json);
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }

Output

=>{"application":"admin","keytype":"PRODUCTION","callbackUrl":"qwerewqr;ewqrwerq;qwerqwerq","authorizedDomains":"ALL","validityTime":"3600000","retryAfterFailure":true}


{"validityTime":"3600000","callbackUrl":"qwerewqr;ewqrwerq;qwerqwerq","application":"admin","retryAfterFailure":true,"authorizedDomains":"ALL","keytype":"PRODUCTION"}
Sign up to request clarification or add additional context in comments.

6 Comments

thanks .. this is working but my problem is when i invoke from args[0].toString(); then not working..
@RoshanWijesena - Print out what you get from args[0]. You SHOULD NOT see any escapes. Presumably parse returns a String error message (which you should test with instanceof) when it encounters an error.
@HotLicks thanks. When i am print it out it is giving me "{\"application\":\"admin\",\"keytype\":\"PRODUCTION\",\"callbackUrl\":\"qwerewqr;ewqrwerq;qwerqwerq\",\"authorizedDomains\":\"ALL\",\"validityTime\":\"3600000\",\"retryAfterFailure\":true}"
@RoshanWijesena answer edited, as per your requirement
Yep, the escapes do not belong there. It isn't a C string, so escapes may not be required (depending on the OS and command analyzer used).
|
2

Make sure that the string is a valid JSON. You can user JSONObject parameterized constructor with the given string to convert the JSON string to a valid JSON object.

For example,

try {
    String jsonString = " {'application':'admin','keytype':'PRODUCTION','callbackUrl':'qwerewqr;ewqrwerq;qwerqwerq','authorizedDomains':'ALL','validityTime':3600000,'retryAfterFailure':true}";
 
    JSONObject data = new JSONObject(jsonString);
    String application = data.getString("application"); //gives admin
    String keytype = data.getString("keytype"); //gives PRODUCTION
} catch (JSONException e) {
    e.printStackTrace();
}

Comments

1

I had the same issue


   package com.test;

   import org.json.JSONObject;
   import org.json.simple.parser.JSONParser;
   import org.json.simple.parser.ParseException;

   public class JSONTest {    

        public static void main(String[] args) {

            String s = args[0];
            try {
                JSONObject json = new JSONObject((String) new JSONParser().parse(s));
                System.out.println(json);
            } catch (ParseException e) {
                e.printStackTrace();
            }
      }
   }

This worked for me

Comments

0

Try this

package com.test;

import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;

public class JSONTest {    

        public static void main(String[] args) {

            String s = args[0];
            try {
                JSONObject json = (JSONObject) new JSONParser().parse(s);
                System.out.println(json);
            } catch (ParseException e) {
                e.printStackTrace();
            }
        }

Then on command line

java -classpath  ".;json-simple-1.1.1.jar" com.test.JSONTest {\"application\":\"admin\",\"keytype\":\"PRODUCTION\",\"callbackUrl\":\"qwerewqr;ewqrwerq;qwerqwerq\",\"authorizedDomains\":\"ALL\",\"validityTime\":\"3600000\",\"retryAfterFailure\":true}

The out put is

{"validityTime":"3600000","callbackUrl":"qwerewqr;ewqrwerq;qwerqwerq","application":"admin","retryAfterFailure":true,"authorizedDomains":"ALL","keytype":"PRODUCTION"}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.