web-dev-qa-db-ja.com

JSONObjectをカスタムJavaクラスにキャストするにはどうすればよいですか?

Java( sing json-simple )では、JSON.stringifyを使用してJavaScriptで作成されたJSON文字列を正常に解析しました。次のようになります。

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

この文字列は、純粋なJavaクラスとして再構成したいカスタムJavaScriptオブジェクトの状態を格納しています。うまくいきません-最初にC#のバックグラウンドからのJavaへの進出。 :-p

オブジェクトは現在org.json.simple.JSONObjectの形式になっています。それは、JSONParser.parse()オペレーションからjson-simpleが作成したものだからです。

このJSONObjectを新しいJavaクラスにキャストするにはどうすればよいですか(その定義は以下のとおりです...)

public class MyCustomJSObject {
    public int teq;
    public int ver;
    public int rev;
    public int cop;
}
16
Geek Stocks

ジャクソンライブラリを使用する

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

    //convert json string to object
    Employee emp = objectMapper.readValue(jsonData, Employee.class); 
17

https://github.com/google/gson から依存関係を追加し、次のように使用します

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

これを行うライブラリはたくさんあります。これは私の提案です。 ここ ライブラリを見つけることができます

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>
4
diyoda_

JSON文字列をJava Class?にするには、fastjsonを試すことができます。

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

Javaコードを使用:

MyCustomJSObject object = JSON.parseObject(jsonString,MyCustomJSObject.class); 
3
Vito

2018年1月9日更新

この(現在人気のある)質問がされてから数年が経過しました。当時はjson-simpleが私の必要であったことにまだ同意しますが、考えてみると、SOコミュニティは、Jacksonソリューションの横に「チェックマーク」を付けることでより良いサービスを提供できると思います。私は今日は自分の答えを受け入れます;ジャクソンはかなり素晴らしいです!


このまともな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も使用しています。

2
Geek Stocks