JSON处理的Java API(JSR-353)–流API

Java很快将具有一组标准的API,作为Java EE 7的一部分处理JSON。此标准定义为JSR 353 – JSON处理的Java API (JSON-P),目前正在最终批准投票中。 JSON-P提供面向对象和基于流的方法,在本文中,我将介绍流API。 您可以从下面的链接获取JSON-P参考实现:


JsonGenerator(javax.json.stream)

JsonGenerator使创建JSON非常容易。 凭借其流畅的API ,用于生成JSON的代码与生成的JSON非常相似。

package blog.jsonp;
 
import java.util.*;
import javax.json.Json;
import javax.json.stream.*;
 
public class GeneratorDemo {
 
    public static void main(String[] args) {
        Map<String, Object> properties = new HashMap<String, Object>(1);
        properties.put(JsonGenerator.PRETTY_PRINTING, true);
        JsonGeneratorFactory jgf = Json.createGeneratorFactory(properties);
        JsonGenerator jg = jgf.createGenerator(System.out);
         
        jg.writeStartObject()                    // {
            .write("name", "Jane Doe")           //    "name":"Jane Doe",
            .writeStartObject("address")         //    "address":{
                .write("type", 1)                //        "type":1,
                .write("street", "1 A Street")   //        "street":"1 A Street",
                .writeNull("city")               //        "city":null,
                .write("verified", false)        //        "verified":false
            .writeEnd()                          //    },
            .writeStartArray("phone-numbers")    //    "phone-numbers":[
                .writeStartObject()              //        {
                    .write("number", "555-1111") //            "number":"555-1111",
                    .write("extension", "123")   //            "extension":"123"
                .writeEnd()                      //        },
                .writeStartObject()              //        {
                    .write("number", "555-2222") //            "number":"555-2222",
                    .writeNull("extension")      //            "extension":null
                .writeEnd()                      //        }
            .writeEnd()                          //    ]
        .writeEnd()                              // }
        .close();
    }
 
}
输出量

以下是运行GeneratorDemo的输出。

{
    "name":"Jane Doe",
    "address":{
        "type":1,
        "street":"1 A Street",
        "city":null,
        "verified":false
    },
    "phone-numbers":[
        {
            "number":"555-1111",
            "extension":"123"
        },
        {
            "number":"555-2222",
            "extension":null
        }
    ]
}

JsonParser(javax.json.stream)

使用JsonParser,我们将解析上一示例的输出以获取地址信息。 JSON解析器提供与JSON结构相对应的事件的深度优先遍历。 根据事件的类型,可以从JsonParser获得不同的数据。

package blog.jsonp;
 
import java.io.FileInputStream;
import javax.json.Json;
import javax.json.stream.JsonParser;
import javax.json.stream.JsonParser.Event;
 
public class ParserDemo {
 
    public static void main(String[] args) throws Exception  {
        try (FileInputStream json = new FileInputStream("src/blog/jsonp/input.json")) {
            JsonParser jr = Json.createParser(json);
            Event event = null;
     
            // Advance to "address" key
            while(jr.hasNext()) {
                event = jr.next();
                if(event == Event.KEY_NAME && "address".equals(jr.getString())) {
                    event = jr.next();
                    break;
                }
            }
     
            // Output contents of "address" object
            while(event != Event.END_OBJECT) {
                switch(event) {
                    case KEY_NAME: {
                        System.out.print(jr.getString());
                        System.out.print(" = ");
                        break;
                    }
                    case VALUE_FALSE: {
                        System.out.println(false);
                        break;
                    }
                    case VALUE_NULL: {
                        System.out.println("null");
                        break;
                    }
                    case VALUE_NUMBER: {
                        if(jr.isIntegralNumber()) {
                            System.out.println(jr.getInt());
                        } else {
                            System.out.println(jr.getBigDecimal());
                        }
                       break;
                    }
                    case VALUE_STRING: {
                        System.out.println(jr.getString());
                        break;
                    }
                    case VALUE_TRUE: {
                        System.out.println(true);
                        break;
                    }
                    default: {
                    }
                }
                event = jr.next();
            }
        }
    }
 
}
输出量

下面是运行ParserDemo的输出

type = 1
street = 1 A Street
city = null
verified = false

MOXy和JSON处理的Java API(JSR-353)

将JSON映射到域对象仍然是与JSON交互的最简单方法。 现在,JSR-353即将完成,我们将其集成到MOXy的JSON绑定中。 您可以使用以下链接跟踪我们的进度:


翻译自: https://www.javacodegeeks.com/2013/04/java-api-for-json-processing-jsr-353-stream-apis.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值