Javaでjson-simpleライブラリを使用するのは初めてで、 encoding と decoding の両方のサンプルを使用しました。エンコードの例は問題ありませんでしたが、デコードされたものを混合型JSONで動作させることはできませんでした。
私の問題の1つは、適切に文書化されていないライブラリのクラスが多すぎて、ソースを持たないことです(目的を読み通して理解できるようにするため)。その結果、これらのクラスの多くを使用する方法を理解するのに苦労しています。
この例を読んだ後:
String jsonText = "{\"first\": 123, \"second\": [4, 5, 6], \"third\": 789}";
JSONParser parser = new JSONParser();
ContainerFactory containerFactory = new ContainerFactory(){
public List creatArrayContainer() {
return new LinkedList();
}
public Map createObjectContainer() {
return new LinkedHashMap();
}
};
try {
Map json = (Map)parser.parse(jsonText, containerFactory);
Iterator iter = json.entrySet().iterator();
System.out.println("==iterate result==");
while(iter.hasNext()) {
Map.Entry entry = (Map.Entry)iter.next();
System.out.println(entry.getKey() + "=>" + entry.getValue());
}
System.out.println("==toJSONString()==");
System.out.println(JSONValue.toJSONString(json));
} catch(ParseException pe) {
System.out.println(pe);
}
json-simple official decode tutorial から、私はこのJSONをデコードしようとしました:
{
"stat":{
"sdr": "MAC address of FLYPORT",
"rcv": "ff:ff:ff:ff:ff:ff",
"time": "0000000000000",
"type": 0,
"subt": 0,
"argv": [
{"type": "6","val": "NetbiosName"},
{"type": "6","val": "MACaddrFlyport"},
{"type": "6","val": "FlyportModel"},
{"type": "1","val": id}
]
}
}
デコードする次のコードを書いています。
String jsonString = "{\"stat\":{\"sdr\": \"aa:bb:cc:dd:ee:ff\",\"rcv\": \"aa:bb:cc:dd:ee:ff\",\"time\": \"UTC in millis\",\"type\": 1,\"subt\": 1,\"argv\": [{1,2},{2,3}]}}";
JSONObject jsonObject = new JSONObject(jsonString);
JSONObject newJSON = jsonObject.getJSONObject("stat");
System.out.println(newJSON);
しかし、それは機能しません。実際、変更されていない例を動作させることもできず、元の作者はコードを説明していません。
このJSONをデコードする最も簡単な方法は何ですか?
これが最良かつ最も簡単なコードです:
public class test
{
public static void main(String str[])
{
String jsonString = "{\"stat\": { \"sdr\": \"aa:bb:cc:dd:ee:ff\", \"rcv\": \"aa:bb:cc:dd:ee:ff\", \"time\": \"UTC in millis\", \"type\": 1, \"subt\": 1, \"argv\": [{\"type\": 1, \"val\":\"stackoverflow\"}]}}";
JSONObject jsonObject = new JSONObject(jsonString);
JSONObject newJSON = jsonObject.getJSONObject("stat");
System.out.println(newJSON.toString());
jsonObject = new JSONObject(newJSON.toString());
System.out.println(jsonObject.getString("rcv"));
System.out.println(jsonObject.getJSONArray("argv"));
}
}
jsonファイルのライブラリ定義はここにあります 。そして、それは投稿されたものと同じライブラリではありません here 、つまりあなたが投稿したものです。あなたが投稿したのは シンプルなjsonライブラリ 私は このライブラリ を使用しました。
Zipをダウンロード ができます。そして、名前にorg.jsonを使用してプロジェクトにpackage
を作成します。ダウンロードしたすべてのコードをそこに貼り付けて、楽しんでください。
私はこれが最高で最も簡単なJSONデコードであると感じています。
まあ、あなたのjsonStringは間違っています。
String jsonString = "{\"stat\":{\"sdr\": \"aa:bb:cc:dd:ee:ff\",\"rcv\": \"aa:bb:cc:dd:ee:ff\",\"time\": \"UTC in millis\",\"type\": 1,\"subt\": 1,\"argv\": [{\"1\":2},{\"2\":3}]}}";
このjsonString
を使用し、例で同じJSONParser
とContainerFactory
を使用すると、エンコード/デコードされることがわかります。
さらに、stat
の後に文字列を出力する場合は、次のようになります。
try{
Map json = (Map)parser.parse(jsonString, containerFactory);
Iterator iter = json.entrySet().iterator();
System.out.println("==iterate result==");
Object entry = json.get("stat");
System.out.println(entry);
}
また、jsonライブラリについては、多くのライブラリがあります。 this を確認してください。
Veerが提案する個別のJavaファイルをダウンロードする代わりに、これをパッケージに追加できます JARファイル 。
Eclipseでプロジェクトにjarファイルを追加するには、次の手順を実行します。
これはデコードしたいJSON文字列です:
{
"stats": {
"sdr": "aa:bb:cc:dd:ee:ff",
"rcv": "aa:bb:cc:dd:ee:ff",
"time": "UTC in millis",
"type": 1,
"subt": 1,
"argv": [
{"1": 2},
{"2": 3}
]}
}
この文字列を変数名「sJSON」の下に保存します。これが、デコード方法です:)
// Creating a JSONObject from a String
JSONObject nodeRoot = new JSONObject(sJSON);
// Creating a sub-JSONObject from another JSONObject
JSONObject nodeStats = nodeRoot.getJSONObject("stats");
// Getting the value of a attribute in a JSONObject
String sSDR = nodeStats.getString("sdr");