私はJsonObjectを持っています
JsonObject jsonObject = {"keyInt":2,"keyString":"val1","id":"0123456"}
すべてのJsonObject
には"id"
エントリが含まれていますが、他のキーと値のペアの数は決定されていないため、2つの属性を持つオブジェクトを作成します。
class myGenericObject {
Map<String, Object> attributes;
String id;
}
だから私は私の属性マップを次のようにしたいです:
"keyInt" -> 4711
"keyStr" -> "val1"
私はこの解決策を見つけました
Map<String, Object> attributes = new HashMap<String, Object>();
Set<Entry<String, JsonElement>> entrySet = jsonObject.entrySet();
for(Map.Entry<String,JsonElement> entry : entrySet){
attributes.put(entry.getKey(), jsonObject.get(entry.getKey()));
}
値は""
で囲まれています
"keyInt" -> "4711"
"keyStr" -> ""val1""
プレーンな値(4711
および"val1"
)を取得する方法は?
入力データ:
{
"id": 0815,
"a": "a string",
"b": 123.4,
"c": {
"a": 1,
"b": true,
"c": ["a", "b", "c"]
}
}
または
{
"id": 4711,
"x": false,
"y": "y?",
}
「」を空白に置き換えます。
Map<String, Object> attributes = new HashMap<String, Object>();
Set<Entry<String, JsonElement>> entrySet = jsonObject.entrySet();
for(Map.Entry<String,JsonElement> entry : entrySet){
if (! nonProperties.contains(entry.getKey())) {
properties.put(entry.getKey(), jsonObject.get(entry.getKey()).replace("\"",""));
}
}
JsonObjectをどのように作成していますか?あなたのコードは私のために働きます。このことを考慮
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
...
...
...
try{
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("keyInt", 2);
jsonObject.addProperty("keyString", "val1");
jsonObject.addProperty("id", "0123456");
System.out.println("json >>> "+jsonObject);
Map<String, Object> attributes = new HashMap<String, Object>();
Set<Entry<String, JsonElement>> entrySet = jsonObject.entrySet();
for(Map.Entry<String,JsonElement> entry : entrySet){
attributes.put(entry.getKey(), jsonObject.get(entry.getKey()));
}
for(Map.Entry<String,Object> att : attributes.entrySet()){
System.out.println("key >>> "+att.getKey());
System.out.println("val >>> "+att.getValue());
}
}
catch (Exception ex){
System.out.println(ex);
}
そして、それはうまく機能しています。今、私はあなたがあなたのそのJSONをどのように作成したかを知ることに興味がありますか?
これを試すこともできます(JSONObject)
import org.json.JSONObject;
...
...
...
try{
JSONObject jsonObject = new JSONObject("{\"keyInt\":2,\"keyString\":\"val1\",\"id\":\"0123456\"}");
System.out.println("JSON :: "+jsonObject.toString());
Iterator<String> it = jsonObject.keys();
while( it.hasNext() ){
String key = it.next();
System.out.println("Key:: !!! >>> "+key);
Object value = jsonObject.get(key);
System.out.println("Value Type "+value.getClass().getName());
}
}
catch (Exception ex){
System.out.println(ex);
}
以下の変更を加えるだけです...
Map<String, Object> attributes = new HashMap<String, Object>();
Set<Entry<String, JsonElement>> entrySet = jsonObject.entrySet();
for(Map.Entry<String,JsonElement> entry : entrySet){
attributes.put(entry.getKey(), jsonObject.get(entry.getKey()).getAsString());
}
「getAsString」はあなたのための魔法を行います
マップの値は JsonElement
sです。 JsonElement
を出力するときはいつでも(例えば、デバッガーを使用して)その toString()
メソッドが呼び出されます-JsonElement
には多くの実装クラスがあるため、デフォルトのtoString
実装は、値を引用符で囲んで、正しいJSONを保証します。値を通常のラップされていないString
として取得するには、単純に getAsString()
を呼び出します。
JsonElement elem;
// ...
String value = elem.getAsString();
あなたの例で:
Map<String, Object> attributes = new HashMap<String, Object>();
Set<Entry<String, JsonElement>> entrySet = jsonObject.entrySet();
for(Map.Entry<String,JsonElement> entry : entrySet){
attributes.put(entry.getKey(), jsonObject.get(entry.getKey()).getAsString());
}
他の型を生成するためにJsonElement
を呼び出すことができる他の多くのメソッドがあることに注意してください。
そもそもなぜ手動操作をしたいのかよくわかりません。 GSONデコードは、存在しないキー/値のペアをデフォルト値(ゼロ、null)のままにします。その後、必要に応じて処理できます。