Jackson树模型JsonNode

2019-05-09 23:36|来源: 网路

树模型准备JSON文件的内存树表示。 ObjectMapper构建JsonNode节点树。这是最灵活的方法。它类似于DOM解析器的XML。

从JSON创建树

ObjectMapper提供一个指针树的根节点在读取JSON之后。根节点可用于遍历完全树。考虑下面的代码片段获得提供JSON字符串的根节点。

//Create an ObjectMapper instance
ObjectMapper mapper = new ObjectMapper();	
String jsonString = "{\"name\":\"Mahesh Kumar\", \"age\":21,\"verified\":false,\"marks\": [100,90,85]}";
//create tree from JSON
JsonNode rootNode = mapper.readTree(jsonString);

遍历树模型

使用相对路径来根节点在遍历树,并处理该数据得到的每个节点。考虑下面的代码片段遍历提供的根节点的树。

JsonNode nameNode = rootNode.path("name");
System.out.println("Name: "+ nameNode.getTextValue());
 
JsonNode marksNode = rootNode.path("marks");
Iterator iterator = marksNode.getElements();

示例

创建一个名为JacksonTester在Java类文件目录 C:\>Jackson_WORKSPACE.

File: JacksonTester.java

import java.io.IOException;
import java.util.Iterator;

import org.codehaus.jackson.JsonNode;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;

public class JacksonTester {
   public static void main(String args[]){
      JacksonTester tester = new JacksonTester();
      try {
         ObjectMapper mapper = new ObjectMapper();
         String jsonString = "{\"name\":\"Mahesh Kumar\", \"age\":21,\"verified\":false,\"marks\": [100,90,85]}";
         JsonNode rootNode = mapper.readTree(jsonString);

         JsonNode nameNode = rootNode.path("name");
         System.out.println("Name: "+ nameNode.getTextValue());

         JsonNode ageNode = rootNode.path("age");
         System.out.println("Age: " + ageNode.getIntValue());

         JsonNode verifiedNode = rootNode.path("verified");
         System.out.println("Verified: " + (verifiedNode.getBooleanValue() ? "Yes":"No"));

         JsonNode marksNode = rootNode.path("marks");
         Iterator<JsonNode> iterator = marksNode.getElements();
         System.out.print("Marks: [ ");
         while (iterator.hasNext()) {
            JsonNode marks = iterator.next();
            System.out.print(marks.getIntValue() + " "); 
         }
         System.out.println("]");
      } catch (JsonParseException e) {
         e.printStackTrace();
      } catch (JsonMappingException e) {
         e.printStackTrace();
      } catch (IOException e) {
         e.printStackTrace();
      }
   }
}

验证输出结果

使用javac编译如下类:

C:\Jackson_WORKSPACE>javac JacksonTester.java

现在运行jacksonTester看到结果:

C:\Jackson_WORKSPACE>java JacksonTester

验证输出

Name: Mahesh Kumar
Age: 21
Verified: No
Marks: [ 100 90 85 ]

树到JSON转换

在这个例子中,我们已经使用JsonNode并将其写入到一个JSON文件,并读回创建了一棵树。

创建一个名为JacksonTester在Java类文件目录 C:\>Jackson_WORKSPACE.

File: JacksonTester.java

import java.io.File;
import java.io.IOException;
import java.util.Iterator;

import org.codehaus.jackson.JsonNode;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.node.ArrayNode;
import org.codehaus.jackson.node.ObjectNode;

public class JacksonTester {
   public static void main(String args[]){
      JacksonTester tester = new JacksonTester();
      try {
         ObjectMapper mapper = new ObjectMapper();

         JsonNode rootNode = mapper.createObjectNode();
         JsonNode marksNode = mapper.createArrayNode();
         ((ArrayNode)marksNode).add(100);
         ((ArrayNode)marksNode).add(90);
         ((ArrayNode)marksNode).add(85);
         ((ObjectNode) rootNode).put("name", "Mahesh Kumar");
         ((ObjectNode) rootNode).put("age", 21);
         ((ObjectNode) rootNode).put("verified", false);
         ((ObjectNode) rootNode).put("marks",marksNode);

         mapper.writeValue(new File("student.json"), rootNode);

         rootNode = mapper.readTree(new File("student.json"));

         JsonNode nameNode = rootNode.path("name");
         System.out.println("Name: "+ nameNode.getTextValue());

         JsonNode ageNode = rootNode.path("age");
         System.out.println("Age: " + ageNode.getIntValue());

         JsonNode verifiedNode = rootNode.path("verified");
         System.out.println("Verified: " + (verifiedNode.getBooleanValue() ? "Yes":"No"));

         JsonNode marksNode1 = rootNode.path("marks");
         Iterator<JsonNode> iterator = marksNode1.getElements();
         System.out.print("Marks: [ ");
         while (iterator.hasNext()) {
            JsonNode marks = iterator.next();
            System.out.print(marks.getIntValue() + " "); 
         }
         System.out.println("]");
      } catch (JsonParseException e) {
         e.printStackTrace();
      } catch (JsonMappingException e) {
         e.printStackTrace();
      } catch (IOException e) {
         e.printStackTrace();
      }
   }
}

验证结果

使用javac编译如下类:

C:\Jackson_WORKSPACE>javac JacksonTester.java

现在运行jacksonTester看到的结果:

C:\Jackson_WORKSPACE>java JacksonTester

验证输出

Name: Mahesh Kumar
Age: 21
Verified: No
Marks: [ 100 90 85 ]

从树到Java对象转换

在这个例子中,我们已经使用JsonNode并将其写入到一个JSON文件,并回读然后将一个Student对象其转换为创建了一棵树。

创建一个名为JacksonTester在Java类文件目录 C:\>Jackson_WORKSPACE.

File: JacksonTester.java

import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import org.codehaus.jackson.JsonNode;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.node.ArrayNode;
import org.codehaus.jackson.node.ObjectNode;
public class JacksonTester {
   public static void main(String args[]){
      JacksonTester tester = new JacksonTester();
      try {
         ObjectMapper mapper = new ObjectMapper();

         JsonNode rootNode = mapper.createObjectNode();
         JsonNode marksNode = mapper.createArrayNode();
         ((ArrayNode)marksNode).add(100);
         ((ArrayNode)marksNode).add(90);
         ((ArrayNode)marksNode).add(85);
         ((ObjectNode) rootNode).put("name", "Mahesh Kumar");
         ((ObjectNode) rootNode).put("age", 21);
         ((ObjectNode) rootNode).put("verified", false);
         ((ObjectNode) rootNode).put("marks",marksNode);

         mapper.writeValue(new File("student.json"), rootNode);

         rootNode = mapper.readTree(new File("student.json"));

         Student student = mapper.treeToValue(rootNode, Student.class);

         System.out.println("Name: "+ student.getName());
         System.out.println("Age: " + student.getAge());
         System.out.println("Verified: " + (student.isVerified() ? "Yes":"No"));
         System.out.println("Marks: "+Arrays.toString(student.getMarks()));
      } catch (JsonParseException e) {
         e.printStackTrace();
      } catch (JsonMappingException e) {
         e.printStackTrace();
      } catch (IOException e) {
         e.printStackTrace();
      }
   }}class Student {
   String name;
   int age;
   boolean verified;
   int[] marks;
   public String getName() {
      return name;
   }
   public void setName(String name) {
      this.name = name;
   }
   public int getAge() {
      return age;
   }
   public void setAge(int age) {
      this.age = age;
   }
   public boolean isVerified() {
      return verified;
   }
   public void setVerified(boolean verified) {
      this.verified = verified;
   }
   public int[] getMarks() {
      return marks;
   }
   public void setMarks(int[] marks) {
      this.marks = marks;
   }}

验证结果

使用javac编译如下类:

C:\Jackson_WORKSPACE>javac JacksonTester.java

现在运行jacksonTester看到结果:

C:\Jackson_WORKSPACE>java JacksonTester

验证输出

Name: Mahesh Kumar
Age: 21
Verified: No
Marks: [ 100 90 85 ]


相关问答

更多

Django和时区(Django and time zone)

基本上发生的情况是时间使用时间戳存储在数据库中,但使用数据库中指定的时区显示时间,除非手动更改是机器的时区。 但是由于你在django中指定了一个不同的时区,django会调整差异。 所以你需要做的是将db中的时区更改为UTC(进程因引擎而异) 我喜欢这样做的方法是保持数据库时区不变,在django设置中指定'UTC',然后每当向用户显示时间时,使用一些javascript将其转换为本地用户时间。 编辑 之前没有注意到你正在使用PostgreSQL。 我想你可以在postgresql.conf中

正确使用.net MVC Html.CheckBoxFor(Proper usage of .net MVC Html.CheckBoxFor)

这不是正确的语法 第一个参数不是复选框,而是查看复选框的模型绑定: @Html.CheckBoxFor(m => m.SomeBooleanProperty, new { @checked = "checked" }); 第一个参数必须在模型中识别一个布尔属性(它是一个表达式而不是返回值的匿名方法),第二个属性定义任何其他HTML元素属性。 我不是100%确定上述属性将最初检查您的复选框,但您可以尝试。 但要小心 即使它可能工作,稍后可能会出现问题,当加载有效的模型数据,并且该特定属性设置为f

验证关联模型的特定属性(validates specific attribute of associated model)

validate :user_is_photographer, :if => :user def user_is_photographer errors.add(:user, "should be a photographer") unless user.is_photographer end validate :user_is_photographer, :if => :user def user_is_photographer errors.add(:user, "should

Quirks Mode + IE8元素大小计算显得不准确(Quirks Mode + IE8 element size calculations appear inaccurate)

感觉有点hacky(因为它),但我决定使用高度来确定项目是否正确呈现。 这不是很好,我认为可能会有一些陷阱,但它似乎对我有用。 通过检查jQuery是否使用盒子模型,我能够确定是否使用quirks模式(仅限IE)。 然后只是添加while循环直到返回目标高度的情况。 var resize = function( parent ) { parent.width('auto'); var targetHeight = parent.outerHeight(tr

免费(或低成本)工具来创建GUI模型?(Free (or low-cost) tools to create GUI mockups? [closed])

这里有一个非常详尽的商业和非商业工具列表: http : //c2.com/cgi/wiki?GuiPrototypingTools QT设计师确实是用于创建模型的“最接近”的IDE,但专业工具是 更快,因为它们是为这个目的而建造的 不需要编程知识,因此可供分析师和其他非开发人员使用 通常带有“黑白”或“手绘”皮肤,以避免陷入无休止的颜色,字体等讨论 允许您注释您的模型,以激发讨论或使用这些注释进行规范 (就在这里,我是这种工具的作者 - http://MockupScreens.com ) T

相关文章

更多

最近更新

更多