如何在json中获取每个对象的级别,其中对象可以有任意数量的相同对象类型的子对象

Ava*_*mar 5 java json

我有一个员工级别的结构,如下图所示在此处输入图片说明

这个结构是在 json 的帮助下填充和存储的

 {
  "name": "Lao Lao",
  "title": "general manager",
  "children": [
    {
      "name": "Bo Miao",
      "title": "department manager",
      "children": [
        {
          "name": "Li Jing",
          "title": "senior engineer"
        },
        {
          "name": "Li Xin",
          "title": "senior engineer",
          "children": [
            {
              "name": "To To",
              "title": "engineer"
            },
            {
              "name": "Fei Fei",
              "title": "engineer"
            },
            {
              "name": "Xuan Xuan",
              "title": "engineer"
            }
          ]
        }
      ]
    },
    {
      "name": "Su Miao",
      "title": "department manager",
      "children": [
        {
          "name": "Pang Pang",
          "title": "senior engineer"
        },
        {
          "name": "Hei Hei",
          "title": "senior engineer",
          "children": [
            {
              "name": "Xiang Xiang",
              "title": "UE engineer"
            },
            {
              "name": "Dan Dan",
              "title": "engineer"
            },
            {
              "name": "Zai Zai",
              "title": "engineer"
            }
          ]
        }
      ]
    }
  ]
} 
Run Code Online (Sandbox Code Playgroud)

我想解析这个 Json 以获取所有具有这样级别和父名称的对象

{name =  Lao lao , parent = null , level = 1 }
{name =  Bao Miao , parent = Lao lao , level = 2 }
..................................................
{name =  Li Jing  , parent = Bao Miao , level = 3 }
Run Code Online (Sandbox Code Playgroud)

我们如何在java的帮助下解析它?如果有任何具有此类功能的库,请告诉我。

nag*_*547 2

实现模型定义如下。还将 level 和 ParentName 放入 Model 类中。

class Employee{
    String name;
    String title;
    Employee children[];
    int level;
    String parentName;

    @Override
    public String toString(){
        return "{name =  "+name+" , parent = "+parentName+ ", level = "+level+ " }";
    }
}
Run Code Online (Sandbox Code Playgroud)

使用GSON API解析json数据。

Employee e= new Gson().fromJson(new JsonReader(new FileReader("file.json")), Employee.class);
Run Code Online (Sandbox Code Playgroud)

这是适合您的完整计划。经过一个小时的努力,我终于能够为您编写所有代码。到目前为止工作正常:)

import java.io.FileReader;

import com.google.gson.Gson;
import com.google.gson.stream.JsonReader;

public class ParseJson {

    public static void main(String a[]) {
        Gson g = new Gson();
        try {
            Employee e = g.fromJson(new JsonReader(new FileReader("file.json")), Employee.class);

            parseEmployees(e);
            printEmployee(e);
        } catch (Exception e1) {
            e1.printStackTrace();
        }

    }

    private static void parseEmployees(Employee e) {
        setParentAndLevel(e, 1, null);
    }

    private static void setParentAndLevel(Employee e, int lvl, String parent) {
        e.level = lvl;
        e.parentName = parent;
        if (e.children != null && e.children.length > 0) {
            lvl++;
            for (Employee emp : e.children) {
                setParentAndLevel(emp, lvl, e.name);
            }
        }
    }

    public static void printEmployee(Employee e){
        System.out.println(e);
        if (e.children != null && e.children.length > 0) {
            for (Employee emp : e.children) {
                printEmployee(emp);
            }
        }else{
            return ;
            }
        }
    }

    class Employee {
        String name;
        String title;
        Employee children[];
        int level;
        String parentName;

        @Override
        public String toString() {
            return "{name =  " + name + " , parent = " + parentName + ", level = " + level + " }";
        }
    }
Run Code Online (Sandbox Code Playgroud)

输出 :

{name =  Lao Lao , parent = null, level = 1 }
{name =  Bo Miao , parent = Lao Lao, level = 2 }
{name =  Li Jing , parent = Bo Miao, level = 3 }
{name =  Li Xin , parent = Bo Miao, level = 3 }
{name =  To To , parent = Li Xin, level = 4 }
{name =  Fei Fei , parent = Li Xin, level = 4 }
{name =  Xuan Xuan , parent = Li Xin, level = 4 }
{name =  Su Miao , parent = Lao Lao, level = 2 }
{name =  Pang Pang , parent = Su Miao, level = 3 }
{name =  Hei Hei , parent = Su Miao, level = 3 }
{name =  Xiang Xiang , parent = Hei Hei, level = 4 }
{name =  Dan Dan , parent = Hei Hei, level = 4 }
{name =  Zai Zai , parent = Hei Hei, level = 4 }
Run Code Online (Sandbox Code Playgroud)