Our Community is getting an upgrade! To get everything ready for the relaunch, we’ll be placing the site in read-only mode starting September 21st.
We really appreciate your understanding while we get things set up behind the scenes. Catch up on all the exciting details about the move here.
Need help or have questions? Drop us a line at [email protected]
Created 01-31-2017 01:06 AM
I have a JSON string (of type object) as follows:
{"field1":1,"field2":"abc"}
and I would like to convert it to a Java Object[2], where the 1st element is new Integer(1) and the 2nd element is new String("abc"). I tried both Jackson and GSON but couldn't find a way to do this conversion. Any help would be appreciated, thank you.
Created 01-31-2017 01:12 AM
Perhaps you should paste your code for suggestion but this website is one I always reference http://www.mkyong.com/java/how-do-convert-java-object-to-from-json-format-gson-api/
Created 01-31-2017 01:12 AM
Perhaps you should paste your code for suggestion but this website is one I always reference http://www.mkyong.com/java/how-do-convert-java-object-to-from-json-format-gson-api/
Created 01-31-2017 01:24 AM
Hi @Artem Ervits, yes I checked that too, but I need an Object array which seems to be the only case not covered...
Jackson:
ObjectMapper mapper = new ObjectMapper();
return mapper.readValue(json, Object[].class);
Error: Can not deserialize instance of java.lang.Object[] out of START_OBJECT token at [Source: {"f1":1,"f2":"abc"}; line: 1, column: 1]
GSON:
Gson gson = new Gson();
return gson.fromJson(json, Object[].class);
Error: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2
Created 01-31-2017 02:19 AM
@Dayou Zhou using json-simple
import org.json.JSONObject;
public class JSONParser {
public static void main(String[] args) {
String jsonStr = "{\"field1\":1,\"field2\":\"abc\"}";
JSONObject json = new JSONObject(jsonStr);
Person person = new Person();
person.setKey(json.getInt("field1"));
person.setValue(json.getString("field2"));
System.out.println(person.toString());
}
}
class Person {
int key;
String value;
@Override
public String toString() {
return "Person{" + "key=" + key + ", value=" + value + '}';
}
public int getKey() {
return key;
}
public void setKey(int key) {
this.key = key;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
maven dependency
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20160810</version>
</dependency>
<dependency>
<groupId>com.googlecode.json-simple</groupId>
<artifactId>json-simple</artifactId>
<version>1.1.1</version>
<type>jar</type>
</dependency>
output
Person{key=1, value=abc}
Created 02-01-2017 01:56 AM
Hi @Artem Ervits, yes looks like this is what I need, and is perhaps the only way for my use case. Thank you for your help.
Created 02-01-2017 01:58 AM
absolutely @Dayou Zhou please accept it as best answer if it helped. Thanks
Created 01-31-2017 01:52 AM
Here is the correct example to parse your JSON.
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
public class JSONParser {
public static void main(String[] args) throws IOException {
try(Reader reader = new InputStreamReader(JsonToJava.class.getResourceAsStream("Server1.json"), "UTF-8")){
Gson gson = new GsonBuilder().create();
Person p = gson.fromJson(reader, Person.class);
System.out.println(p);
}
}
}
Person.java as
public class Person {
private String field1;
private String field2;
@Override
public String toString() {
return field1 + " - " + field2;
}
}Command to run: java -cp .:gson-2.2.2.jar JSONParser
output should be "1 - abc"