Can't parse string to JSONArray - java

I have the following string which (as far as I know) is in a valid format
[
{
"name":"John Doe"
},
{
"name":"Jane Doe"
}
]
After calling the following:
return new JSONArray(jsonString);
With jsonString being the JSON given above. I get the following error:
org.json.JSONException: Value jsonString of type java.lang.String cannot be converted to JSONArray
Any ideas why the parser won't accept the string?
Edit
The problem has been solved. The array was encoded as a string in the JSON output. I first retrieved the string with the getString(param) method instead of trying to convert it directly with getJsonArray, then converted the string to the json array.

The JSON appears to be valid on jsonlint.com. But a quick Google search reveals that there are other possible sources of the problem:
Are you specifying UTF-8 encoding and decoding the string before parsing it as a JSON object?
Do you need to add a json library to your project?

The problem has been solved. The array was encoded as a string in the full JSON output. I first retrieved the string with the getString(param) method instead of trying to convert it directly with getJsonArray, then converted the string to the json array.

Related

Error Parsing JSON String to JSONObject in Java

I have an application that stores this JSON String :
String message ="{\"uid\":\"1\",\"streetName\":\"road\",\"city\":\"London\",\"speedLimit\":20}"
Now I want to parse it back to a JSON Object, In order to do so I have this line:
JsonObject object = new JsonParser().parse(message).getAsJsonObject();
I am using Gson Library to parse it and use it as a JSON Object. However, I am getting this exception :
com.google.gson.stream.MalformedJsonException: Expected name at line 1 column 2 path $.
Update 1
I have tried this
String message = "{"uid":"1","streetName":"road","city":"London","speedLimit":20}";
JSONObject object = new JSONObject(message);
Now I get this exception:
Unterminated string at character 28 of {"uid":"1","streetName":"roa
I have tried lots of workarounds from multiple threads on StackOverflow but nothing is working and I have no idea why ?
You can Directly cast it to the JSONObject,
JSONObject response = new JSONObject();
String str = "{\"uid\":\"1\",\"streetName\":\"road\",\"city\":\"London\",\"speedLimit\":20}";
response = new JSONObject(str);
Now the string response has casted as Json response.
you code is fine and should work
please check on the import of the JsonParser in your java file (should be com.google.gson.JsonParser)
let know on the Gson version if the JsonParser is not the issue
your code should work, may be you need to check the dependencies as mentioned before.
I am using this dependency https://mvnrepository.com/artifact/com.google.code.gson/gson/2.8.0
here is an sscce that work https://github.com/SalehAly/test-gson
I found my problem.
The String I was processing was malformed for the source. Fixing the string was the answer in here. Nothing was wrong with how I parsed the string.
Thanks for all the answers and the help.

How to put the string in the JSON and get the value in Java

I want to get the value of String and I am trying to put the string in the JSON and get it. The format of string is "key=value&key1=value". The code I am using is:
JSONObject json = new JSONObject(String);
String value = json.get("key").toString();
That string is url encoded not json formatted.
You can use a url decoder instead. Something like http://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/client/utils/URLEncodedUtils.html might work for you.
I used Patterns and Matchers and it worked perfectly. Thank you.

Giving incorrect values when converting JSON string to XML and XML back to JSON string

I am using org.json for converting the json string to xml and xml back to json. I am getting the expected response for json string which has only key value pairs, but incase of json string contains of jsonarray objects the return value is different from the input?
Below the code i have used,
import org.json.JSONObject;
import org.json.XML;
String jsonStr ="........";
System.out.println("The JSON Raw Text :"+ jsonStr);
JSONObject jObject = new JSONObject(jsonStr);
String xml = org.json.XML.toString(jObject);
JSONObject xmlJSONObj = XML.toJSONObject(xml);
String jsonConvertString = xmlJSONObj.toString();
System.out.println("JSON text converted : "+jsonConvertString);
What is the error or what is the best way to convert json string to xml and back to json ?
Looks like you are facing problem as explained in this blog.
In short: XML.toString() does NOT produce an XML document. When you use a JSONArray the produced xml string from this method has NO root element.
Therefore, if you are planning to write the contents to an XML file, I'll recommend you use a more stringent API such as org.w3c.dom.*. This will produce a VALID xml document that can be dumped to a file.
Or an easier way would be use something like "<root>" + org.json.XML.toString(jArray) + "</root>" so that you have a root element. This might be parsed pretty well (and as you expect) by XML.toJSONObject().

Java Json / Gson put json encoded string to jsonObject without string escapes

i first create a Json String with
String myJsonString = new Gson().toJson(myElement);
this works fine.
After that, i want to add this String to anothe big jsonObject to send it to backend with other vars.
jsonObject.put("Tests",myJsonString);
but with this line of code the special character will be escaped and the parser on the backend didnt get it.
How can I avoid it, that myJsonString will be serialized again?
jsonObject.put("Tests",myElement);
doesnt work, because after that there are only references in the jsonObject but no values.
jsonObject.put("Tests", new JSONObject(myJsonString));
(assuming jsonObject is of type org.json.JSONObject)

org.json.JSONObject constructor not accepting what appears to be a valid JSON string

I have a string in an Android app that I am trying to convert into a JSONObject. The string looks like this (except longer and with actual values instead of the dummy values I entered here):
[[{"1":"a"}],[{"1a":"1a","1b":"1b"},{"2a":"2a","2b":"2b"}]]
I have entered this exact string into two online JSON validators, and both of them confirm it to be valid JSON data. So I would assume that the JSONObject constructor would be able to accept this string and convert it into a JSONObject. But when I try:
json = new JSONObject(result);
Where "result" is a String variable containing the string listed above, I get the following exception:
JSONException: A JSONObject text must begin with '{' at character 1 of [[{"1":"a"}],[{"1a":"1a","1b":"1b"},{"2a":"2a","2b":"2b"}]]
What's going on here? Is the JSONObject's parser broken?
You are trying to create a JSONObject, but what you are actually giving it is a JSONArray. Did you try creating a JSONArray instead?
Alternatively, you could wrap your array in an object so that you can create a JSONObject out of it.
I would suggest using the GSon library instead as it appears to be more full-featured.
In addition, it may be helpful to use this tool to test your data (your data is valid btw):

Categories

Resources