Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用JAVA递归解析json文件_Java_Json - Fatal编程技术网

用JAVA递归解析json文件

用JAVA递归解析json文件,java,json,Java,Json,我有一个json文件,其中包含包含章节和子章节的章节。。。。章节和子章节的数量并不总是相同的:例如 { "IDCours" : "CS10.44", "title": " .... ", "chapters": [ { "idChapter": "1", "title": "Introduction", "chapters": [ { "idChapter": "1.1",

我有一个json文件,其中包含包含章节和子章节的章节。。。。章节和子章节的数量并不总是相同的:例如

{
"IDCours" : "CS10.44",
"title": " .... ",
"chapters": [
    {
        "idChapter": "1",
        "title": "Introduction",
        "chapters": [
            {
                "idChapter": "1.1",
                "title": "basics",
                "content" : " blab bla blab "
            },
            {
                "idChapter": "1.2",
                "title": "basics",
                "content" : " blab bla blab "
            }                
         ]
      },
      {
      "idChapter": "2",
        "title": "..... ",
        "chapters": [
            {
                "idChapter": "2.1",
                "title": " .... ",
                "content" : " blab bla blab "
            },
            {
                "idChapter": "2.2",
                "title": ".....",
                "content" : " blab bla blab ",
                "chapters": [
                      {
                        "idChapter": "2.2.1",
                        "title": " .... ",
                        "content" : " blab bla blab "
                      }
                    ]   
            }              
         ]
        }
]
}

因此,我认为应该递归进行,因为我不知道文件中有多少章节和子章节,子章节,你不需要递归进行。我通常使用jackson库来处理Json,所以这里介绍如何实现它

public class mainClass {
  String IDCours;
  String title; 
  List<Chapters> chapters;
    public static class Chapters {
      double idChapter;
      String title;
      List<InnerChapters> chapters;

        @JsonIgnoreProperties(ignoreUnknown = true)
        public static class InnerChapters {
          double idChapter;
          String title;
          String content;
          List<InnerChapters> chapters;
   }
 }
}
public类mainClass{
字符串IDCours;
字符串标题;
列出各章;
公共静态类章节{
双章;
字符串标题;
列出各章;
@JsonIgnoreProperties(ignoreUnknown=true)
公共静态类{
双章;
字符串标题;
字符串内容;
列出各章;
}
}
}
并使用方法解析json,如:

public static final ObjectMapper objMapper;
static {
        objMapper= new ObjectMapper();
        objMapper.registerModule(new JavaTimeModule());
    }

public static <T> List<T> fromJsonToList(String json, Class<T> clazz) throws IOException {
        CollectionType customClassCollection = MAPPER.getTypeFactory().constructCollectionType(List.class, clazz);
        return objMapper.readValue(json, customClassCollection);
    }
公共静态最终对象映射器objMapper;
静止的{
objMapper=newObjectMapper();
registerModule(新的JavaTimeModule());
}
来自JSONTOLIST的公共静态列表(字符串json,类clazz)引发IOException{
CollectionType customClassCollection=MAPPER.getTypeFactory().ConstructionCollectionType(List.class,clazz);
返回objMapper.readValue(json,customClassCollection);
}
@如果没有章节列表,JsonIgnoreProperties注释将忽略并不会抛出异常,并继续打包json。
试试看。

你试过什么?请发布您的Java代码,以及哪些代码不能像您期望的那样工作。在当前状态下,这可能因为太宽而关闭。对我的问题有任何帮助吗?是的,发布代码和您迄今为止尝试的内容。我不认为有人会为您编写答案,它是递归完成的,但由JSON解析器完成,而不是由您完成。您所需要的只是众多JSON库中的一个。谢谢您的回答,但我是一名新的编码人员,我不知道如何使用您发布的代码,它在主类中还是在何处?很抱歉我的问题,谢谢你的帮助。你需要创建一个新的类,可以随意命名。另外,您必须导入Jackson库才能使用我的代码来打包Json。提前:如果你是“新编码”,我认为谈论递归方法不是一个好主意@oan我不想听起来很刺耳,把它作为最好的建议,如果你甚至不知道代码应该放在哪里,你应该先从基础开始,在进入这个“高级”问题之前,从控制台基础程序开始,然后进入swing,然后尝试web,等等,否则学习曲线会更难,告诉你一个人做了相反的事情,学习更难:)@BugsForBreakfast谢谢你的建议,我会考虑的:)如果我打扰了你,我很抱歉