Archives of Support Questions (Read Only)

This is an archived board for historical reference. Information and links may no longer be available or relevant
Announcements
This board is archived and read-only for historical reference. To ask a new question, please post a new topic on the appropriate active board.

Converting JSON to Java Object Array

avatar
New Member

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.

1 ACCEPTED SOLUTION

avatar
Master Mentor

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/

View solution in original post

6 REPLIES 6

avatar
Master Mentor

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/

avatar
New Member

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

avatar
Master Mentor

@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}

avatar
New Member

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.

avatar
Master Mentor

absolutely @Dayou Zhou please accept it as best answer if it helped. Thanks

avatar

@Dayou Zhou

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"