jackson中的写和解析JSON的api例子

 本次介绍的是在jackson中,如何去写和解析json,其中用到的都是jackson自己的
流的API.


1 JACKSON中写一个json文件使用的是JsonGenerator类,
 [code="java"]
import java.io.File;
import java.io.IOException;
import org.codehaus.jackson.JsonEncoding;
import org.codehaus.jackson.JsonFactory;
import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.map.JsonMappingException;
 
public class JacksonStreamExample {
   public static void main(String[] args) {
 
     try {
 
JsonFactory jfactory = new JsonFactory();
 
/*** write to file ***/
JsonGenerator jGenerator = jfactory.createJsonGenerator(new File(
"c:\\user.json"), JsonEncoding.UTF8);
jGenerator.writeStartObject(); // {
 
jGenerator.writeStringField("name", "mkyong"); // "name" : "mkyong"
jGenerator.writeNumberField("age", 29); // "age" : 29
 
jGenerator.writeFieldName("messages"); // "messages" :
jGenerator.writeStartArray(); // [
 
jGenerator.writeString("msg 1"); // "msg 1"
jGenerator.writeString("msg 2"); // "msg 2"
jGenerator.writeString("msg 3"); // "msg 3"
 
jGenerator.writeEndArray(); // ]
 
jGenerator.writeEndObject(); // }
 
jGenerator.close();
 
     } catch (JsonGenerationException e) {
 
e.printStackTrace();
 
     } catch (JsonMappingException e) {
 
e.printStackTrace();
 
     } catch (IOException e) {
 
e.printStackTrace();
 
     }
 
   }
 
}
[/code]
输出为:
{
"name":"mkyong",
"age":29,
"messages":["msg 1","msg 2","msg 3"]
}
2 解析JSON
  我们把上面输出的JSON文件重新读取出来,再解析, 注意在json中,解析是以TOKEN方式进行的,比如:
  {
   "name":"mkyong"
}
 将为解析为:
  Token 1 = “{“
Token 2 = “name”
Token 3 = “mkyong”
Token 4 = “}”


代码:
  [code="java"]
import java.io.File;
import java.io.IOException;
import org.codehaus.jackson.JsonFactory;
import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.JsonParser;
import org.codehaus.jackson.JsonToken;
import org.codehaus.jackson.map.JsonMappingException;
 
public class JacksonStreamExample {
   public static void main(String[] args) {
 
     try {
 
JsonFactory jfactory = new JsonFactory();
 
/*** read from file ***/
JsonParser jParser = jfactory.createJsonParser(new File("c:\\user.json"));
 
// loop until token equal to "}"
while (jParser.nextToken() != JsonToken.END_OBJECT) {
 
String fieldname = jParser.getCurrentName();
if ("name".equals(fieldname)) {
 
 
                  //当前结点为name 
 jParser.nextToken();
 System.out.println(jParser.getText()); // 输出 mkyong
 
}
 
if ("age".equals(fieldname)) {
 
 // 当前结点为age 
                  // move to next, which is "name"'s value
 jParser.nextToken();
 System.out.println(jParser.getIntValue()); // display 29
 
}
 
if ("messages".equals(fieldname)) {
 
 jParser.nextToken(); 
 while (jParser.nextToken() != JsonToken.END_ARRAY) {
 
                     // display msg1, msg2, msg3
    System.out.println(jParser.getText()); 
 
 }
 
}
 
 }
 jParser.close();
 
     } catch (JsonGenerationException e) {
 
 e.printStackTrace();
 
     } catch (JsonMappingException e) {
 
 e.printStackTrace();
 
     } catch (IOException e) {
 
 e.printStackTrace();
 
     }
 
  }
 
}
[/code]
最后输出:
mkyong
29
msg 1
msg 2
msg 3
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值