Java编写JSON示例-JSON处理API

x33g5p2x  于2022-10-16 转载在 Java  
字(4.6k)|赞(0)|评价(0)|浏览(702)

在本例中,我们将看到如何使用JSON-P库将JSON写入文件。
代码示例在Github repository.上提供

JSON-P格式

JSON处理(JSON-P)是一种处理(例如解析、生成、转换和查询)JSON消息的Java API。它以流方式生成和使用JSON文本(类似于XML的StAX API),并允许使用API类(类似于用于XML的DOM API)为JSON文本构建Java对象模型。
官方文档-https://javaee.github.io/jsonp上阅读更多关于JSON-P的信息。

添加依赖项

JSON-P是Java JSON处理API的参考实现。我们可以通过添加以下依赖项在maven项目中使用它:

<dependency>
    <groupId>javax.json</groupId>
    <artifactId>javax.json-api</artifactId>
    <version>1.1</version>
</dependency>

<dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>javax.json</artifactId>
    <version>1.1</version>
</dependency>

让我们创建一个名为“posts.JSON”的JSON文件:

{
    "id": 100,
    "title": "JSONP Tutorial",
    "description": "Post about JSONP",
     "content": "HTML content here",
    "tags": [
        "Java",
        "JSON"
    ]
}

我们有Java bean类,它们将上述JSON格式表示为:

package net.javaguides.jsonp.tutorial;

import java.util.Arrays;

public class Post {
    private int id;
    private String title;
    private String description;
    private String content;
    private String[] tags;

    public Post() {

    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public String[] getTags() {
        return tags;
    }

    public void setTags(String[] tags) {
        this.tags = tags;
    }

    @Override
    public String toString() {
        return "Post [id=" + id + ", title=" + title + ", description=" + description + ", content=" + content +
            ", tags=" + Arrays.toString(tags) + "]";
    }
}

Java JSON编写示例

在本例中,我们将PostJavabean对象写入JSON文件“posts.JSON”。在下面的示例中,我们使用JsonGenerator.PRETTY_PRINTING配置设置,以便可以设置写入程序进行打印。

package net.javaguides.jsonp.tutorial;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;

import javax.json.Json;
import javax.json.JsonArrayBuilder;
import javax.json.JsonObject;
import javax.json.JsonObjectBuilder;
import javax.json.JsonWriter;
import javax.json.JsonWriterFactory;
import javax.json.stream.JsonGenerator;


/**
* Class to write json to a posts.json file.
* @author Ramesh fadatare
*
*/
public class WriteJSON {

    public static void main(String[] args) throws FileNotFoundException {
        Post post = createPost();

        JsonObjectBuilder postBuilder = Json.createObjectBuilder();
        JsonArrayBuilder tagsBuilder = Json.createArrayBuilder();

        for (String tag: post.getTags()) {
            tagsBuilder.add(tag);
        }

        postBuilder.add("id", post.getId())
            .add("title", post.getTitle())
            .add("description", post.getDescription())
            .add("content", post.getContent())
            .add("tags", tagsBuilder);


        JsonObject postJsonObject = postBuilder.build();

        System.out.println("Post JSON String -> " + postJsonObject);

        //write to file
        OutputStream os = new FileOutputStream("posts.json");
        JsonWriter jsonWriter = Json.createWriter(os);

        Map < String, Boolean > config = new HashMap < String, Boolean > ();
        config.put(JsonGenerator.PRETTY_PRINTING, true);

        JsonWriterFactory factory = Json.createWriterFactory(config);
        jsonWriter = factory.createWriter(os);

        jsonWriter.writeObject(postJsonObject);
        jsonWriter.close();
    }

    private static Post createPost() {
        // create a post
        Post post = new Post();
        post.setTitle("JSONP Tutorial");
        post.setId(100);
        post.setDescription("Post about JSONP");
        post.setContent("HTML content here");

        String[] tags = {
            "Java",
            "JSON"
        };
        // create some predefined tags
        post.setTags(tags);

        // set tags to post
        return post;
    }
}

让我们理解上面的Java JSON编写一个示例。
主要的JSON-P入口点是JSON类。它提供了从Java解析和构建JSON字符串的所有必要方法。Json是一个包含Json-PAPI所有相关元素的静态工厂方法的单例。

JsonObjectBuilder postBuilder = Json.createObjectBuilder();
JsonArrayBuilder tagsBuilder = Json.createArrayBuilder();

我们创建了一个Json对象,如下所示:

postBuilder.add("id", post.getId())
.add("title", post.getTitle())
.add("description", post.getDescription())
.add("content", post.getContent())
.add("tags", tagsBuilder);
JsonObject postJsonObject = postBuilder.build();

将上面创建的内容写入“posts.json”文件并使用JsonGenerator.pretty_PRINTING设置进行漂亮打印:

//write to file
OutputStream os = new FileOutputStream("posts.json");
JsonWriter jsonWriter = Json.createWriter(os);

Map<String, Boolean> config = new HashMap<String, Boolean>();
config.put(JsonGenerator.PRETTY_PRINTING, true);

JsonWriterFactory factory = Json.createWriterFactory(config);
jsonWriter = factory.createWriter(os);

jsonWriter.writeObject(postJsonObject);
jsonWriter.close();

代码示例在my Github repository.上提供。

相关文章