查看此Json文件,KEY始终是String,但VALUE有时是String,但有时是带有两个String字段的类型化对象。
如何使用GSON解析它?
{
"property": [
{
"key": "key_A",
"value": "value_A"
},
{
"key": "key_B",
"value": "value_B"
},
{
"key": "key_C",
"value": {
"param_C_1": "value_C_1",
"param_C_2": "value_C_2"
}
}
]
}
答案 0 :(得分:0)
第一件事是将这个json文件解析为java,可以完成 这样: -
try {
InputStream is;
//read the whole json file stored in assets
//below is android way of opening file from local resource folder, you can use other means to open
is = getApplicationContext().getAssets().open("jsonfile.json");
int size = is.available();
byte[] buffer = new byte[size];
is.read(buffer);
is.close();
//convert the json file to string
String bufferString = new String(buffer);
JSONObject jsonObject;
JSONArray jsonArray;
jsonObject = new JSONObject(bufferString);
jsonArray=jsonObject.getJSONArray("property");
for (int i=0;i<jsonArray.length();i++){
jsonObject = jsonArray.getJSONObject(i);
JSONObject s = jsonArray.optJSONObject(i);
String s2 = s.getString("value");
if(s2.contains("{")){
JSONObject jobject = new JSONObject(s2);
String valueUnderValue1 = jobject.getString("param_C_1");
String valueUnderValue2 = jobject.getString("param_C_2");
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
然后创建一个具有json文件中所有值的类。 假设该类是MyClass,包含从json文件获得的所有值。
制作MyClass对象,然后
MyClass obj = new MyClass();
Gson gson = new Gson();
JSONObject onj = new JSONObject();
JSONArray userDataValues = new JSONArray();
//again convert to json
userDataValues.put(new JSONObject(gson.toJson(obj)));
//serialized the object
onj.put("property", userDataValues);
我希望这就是你想要的。