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 ]