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;
}
ジャクソンライブラリを使用する
//create ObjectMapper instance
ObjectMapper objectMapper = new ObjectMapper();
//convert json string to object
Employee emp = objectMapper.readValue(jsonData, Employee.class);
https://github.com/google/gson から依存関係を追加し、次のように使用します
Gson gson= new Gson();
CustomPOJOClass obj = gson.fromJson(jsonObject.toString(),CustomPOJOClass.class);
これを行うライブラリはたくさんあります。これは私の提案です。 ここ ライブラリを見つけることができます
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>
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);
この(現在人気のある)質問がされてから数年が経過しました。当時は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も使用しています。