背景信息:我正在开发一个像CMS系统一样的中间人服务。我得到一个完整的复杂json文件放在我的服务器上,然后我需要提供给我的客户,期望json内容。 (我们暂时忽略验证部分)
我在顶级有一个名称,版本和内容字段。内容(章节)作为嵌套复杂对象(深度约5级)的数组存在。
{
"name": "MyCourse",
"version": 12345,
"chapters": [
{
"name": "Chapter01",
"content": {
"menu": {
"id": "Chapter01_EndMenu",
"file": "ch1_end_op.wav"
},
"score": {
"id": "Chapter01_Score",
"files": [....
我尝试过(并且工作):构建我的pojo以镜像json结构,其中内容(章节)作为复杂对象列表存在。在这上面调用gson解析器。
我正在尝试做什么: 拥有一个更简单的pojo,只有名称,版本和内容,其中内容只存储数组表示(章节和嵌套对象)一个字符串。
我尝试将pojo中的内容字段定义为String并设置@SerializedName注释以强制gson将数组解析为字符串,但这不起作用。
是否有可能将json部分地作为字段并将其余的(嵌套数组)放入我的pojo中的字符串字段中?
答案 0 :(得分:2)
在JSONObject
中很简单,您可以使用密钥获取JSON字符串。
String jsonString = "{ \"name\": \"MyCourse\", \"version\": 12345, \"chapters\": [ { \"name\": \"Chapter01\"}]}";
JSONObject jsonObject = new JSONObject(jsonString);
Details details = new Details();
details.setName(jsonObject.get("name"));
details.setVersion(jsonObject.get("version"));
details.setChapters(jsonObject.get("chapters"));
你可以试试这个。
答案 1 :(得分:0)
您可以为String数据类型定义自己的适配器。
电子。 G。 :
GsonBuilder builder = new GsonBuilder();
builder.registerTypeAdapter(String.class, new JsonDeserializer<String>() {
public String deserialize(JsonElement json, Type typeOfT,
JsonDeserializationContext context)
throws JsonParseException {
return json.toString();
}
});
Gson gson = builder.create();
现在它可以将章节数据存储为String。