繁体   English   中英

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

[英]Parse nested json data into string

上下文:我正在研究类似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,它只包含名称,版本和内容,其中内容只是将数组表示形式(章节和嵌套对象)存储为String。

我尝试在pojo中将我的content字段定义为String,并设置@SerializedName注释以强制gson将数组解析为字符串,但这是行不通的。

是否有可能部分将json作为字段并将其余部分(嵌套数组)放入pojo的字符串字段中?

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"));

你可以试试看

您可以为String数据类型定义自己的适配器。

例如

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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM