用于递归结构的json解析器

时间:2013-12-17 13:17:03

标签: java json parsing recursion

我们必须解析类似于下面的json结构。

project {
   header {
   }
   pool {
   }
   cmp {
      name = "";
      id = "";
      desc = "";
      cmp [
        {
          name = "";
          id = "";
          desc = "";
        }
        {
          name = "";
          id = "";
          desc = "";
        }
        {
          name = "";
          id = "";
          desc = "";
          cmp [
          {
            name = "";
            id = "";
            desc = "";        
          }
        }       
    }
}

问题是,cmp元素无限存在于json中(并且它也是递归的)。 cmp元素包含除name,id和desc之外的许多属性。但是我们只需要从jSON中提取name,id和desc。

我可以使用com.json.parsers.JSONParser解析JSON字符串。但是将解析的JSON填充到模型类/ bean类是行不通的。这可能是一个简单的逻辑。但是我不能。请帮忙......

生成json文件作为一个建模软件的输出。

我想用java解析它。有人可以帮我解析一下吗?

希望我已正确解释了这个问题。您的帮助将对我们有所帮助。

2 个答案:

答案 0 :(得分:2)

您可以使用Jackson执行此操作,只需使用消息中可能存在或可能不存在的所有字段创建对象。消息中不存在的所有字段将在结果对象中以null(或基元的默认值)结束。

让对象包含自身的副本,并处理递归

@XmlRootElement
public class Foo {
   Foo recursiveFoo; // will be null or another instance of Foo
   int intData; // Will be 0 or an integer value
   String strData; // Will be null or a String value

   // Getters and setters here
}

答案 1 :(得分:1)

看看Google Gson图书馆。有了它,你可以做以下事情:

class BagOfPrimitives {
  private int value1 = 1;
  private String value2 = "abc";
  private transient int value3 = 3;
  BagOfPrimitives() {
    // no-args constructor
  }
}

//(Serialization)
BagOfPrimitives obj = new BagOfPrimitives();
Gson gson = new Gson();
String json = gson.toJson(obj); 
//==> json is {"value1":1,"value2":"abc"}


//(Deserialization)
BagOfPrimitives obj2 = gson.fromJson(json, BagOfPrimitives.class);  
//==> obj2 is just like obj