Как я могу привести JSONObject к пользовательскому классу Java?

В Java (с использованием json-simple) я успешно проанализировал созданную строку JSON. в JavaScript с использованием JSON.stringify. Это выглядит так:

{"teq":14567,"ver":1,"rev":1234,"cop":15678}

Эта строка хранит состояние пользовательского объекта JavaScript, который я хочу преобразовать в чистый класс Java. Это не очень хорошо - первый набег на Java исходит из фона C #. :-п

В настоящее время объект находится в форме org.json.simple.JSONObject, поскольку это то, что json-simple сделал из операции JSONParser.parse().

Как мне преобразовать этот JSONObject в мой новый класс Java? (определение которого приведено ниже...)

public class MyCustomJSObject {
    public int teq;
    public int ver;
    public int rev;
    public int cop;
}

person Geek Stocks    schedule 15.06.2014    source источник
comment
Возможно, вы захотите взглянуть на Джексона.   -  person Robby Cornelissen    schedule 15.06.2014
comment
Я много слышал об этом, но выбрал json-simple, так как библиотека была тоньше. Может быть, тоньше не так хорошо?   -  person Geek Stocks    schedule 15.06.2014
comment
Тоньше означает, что вам нужно делать больше самостоятельно, например, сопоставлять свой JSON с классом.   -  person Robby Cornelissen    schedule 15.06.2014
comment
@GeekStocks или gson от Google   -  person Raghunandan    schedule 15.06.2014


Ответы (5)


использовать библиотеку джексона

    //create ObjectMapper instance
    ObjectMapper objectMapper = new ObjectMapper();

    //convert json string to object
    Employee emp = objectMapper.readValue(jsonData, Employee.class); 
person arsen_adzhiametov    schedule 15.06.2014
comment
Я думаю, что пользователю нужно конвертировать с помощью JSON-Simple - person rajadilipkolli; 30.08.2016
comment
Да, это правда, моим требованием в то время был JSON-Simple. Однако этот вопрос стал очень популярным, и я отказался от своего ответа и переместил сюда галочку. Я думаю, что сообщество SO получит больше пользы, если его направят к Джексону. См. stackoverflow.com/a/24236703/1884386. - person Geek Stocks; 26.04.2020

Добавьте зависимость от https://github.com/google/gson и используйте ее как

Gson gson= new Gson();
CustomPOJOClass obj = gson.fromJson(jsonObject.toString(),CustomPOJOClass.class);
person Milon    schedule 19.01.2017

Есть много библиотек, которые это делают. Это мое предложение. Здесь вы можете найти библиотеку

import com.google.gson.Gson; 

а затем сделать,

Gson gson = new Gson();  
Student student = gson.fromJson(jsonStringGoesHere, Student.class);  

Зависимость от Maven

    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.2.4</version>
    </dependency>
person diyoda_    schedule 15.06.2014
comment
Спасибо за ваш ответ. Я собираюсь изучить Gson, если json-simple не сработает. - person Geek Stocks; 15.06.2014

ОБНОВЛЕНИЕ 09.01.2018

Прошло несколько лет с тех пор, как был задан этот (теперь популярный) вопрос. Хотя я по-прежнему согласен с тем, что json-simple был моей потребностью в то время, поразмыслив, я думаю, что сообществу SO лучше обслуживать «галочку» рядом с решением Джексона. Сегодня я не принимаю свой собственный ответ; Джексон очень хорош!


Я думаю, что эта приличная json-simple библиотека стала жертвой плохой документации. Если вы не используете JSONParser (поймите!), а вместо этого используете этот метод JSONValue.parse(), все будет работать так:

    //JSONParser parser = new JSONParser(); // DON'T USE THIS
    Object obj = JSONValue.parse("A JSON string - array of objects: [{},{}] - goes here");
    JSONArray arrFilings = (JSONArray)obj;
    System.out.println("We can print one this way...");
    System.out.println(arrFilings.get(5) + "\n");

    System.out.println("We can enumerate the whole array...");
    for(Object objFiling : arrFilings){
        System.out.println(objFiling);
    }
    System.out.println("\n");

    System.out.println("We can access object properties this way...");
    for(Object objFiling : arrFilings){
        JSONObject o = (JSONObject)objFiling; // MUST cast to access .get()
        MyJSObject.fyq = o.get("fyq");
    }
    System.out.println("\n");

Спасибо всем, кто написал. Придерживаться json-simple было вопросом, и это единственный json-simple ответ на сегодняшний день. Джексон ДЕЙСТВИТЕЛЬНО выглядит блестяще, и Amazon использует его в своем SDK для Java, тааак.... если он достаточно хорош для AWS....

person Geek Stocks    schedule 16.06.2014

Строка JSON для класса Java? вы можете попробовать fastjson:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.1.41</version>
</dependency>

и используя код Java:

MyCustomJSObject object = JSON.parseObject(jsonString,MyCustomJSObject.class); 
person Vito    schedule 15.06.2014
comment
Ни Gson, ни Jackson мне не подошли, Fastjson отлично работает. - person Ramiro Arizpe Giacomelli; 28.10.2017