将嵌套的json数据解析为字符串

时间:2015-05-26 04:17:20

标签: java arrays json parsing gson

背景信息:我正在开发一个像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中的字符串字段中?

2 个答案:

答案 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。