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 ]