Gson JsonReader使用讲解

位置:首页>文章>详情   分类: 教程分享 > Java教程   阅读(1983)   2023-03-28 11:29:14
       学习使用Gson JsonReader类,这是一个基于拉的流式JSON解析器,它有助于将JSON作为标记流来读取
GSON
GSON
 

1. JsonReader是什么

  • JsonReader是流式JSON解析器和拉解析器的示例。推送解析器解析JSON令牌并将它们推送到事件处理程序中。
  • 它有助于将JSON(RFC 7159)编码值作为标记流读取。
  • 它读取文字值(字符串,数字,布尔值和空值)以及对象和数组的开始和结束分隔符。
  • 标记以深度优先顺序遍历,与它们在JSON文档中出现的顺序相同。

2. Tokens

在流模式下,每个JSON数据都被视为单个令牌。当我们用JsonReader它来处理它时,每个令牌将按顺序处理。例如,
$title(Json Tokens)
{
    "name":"Lokesh"
}
在使用JsonReader进行解析时,上面的JSON将生成4个token:
  • Token 1 = {
  • Token 2 = name
  • Token 3 = Lokesh
  • Token 4 = }

3.如何创建GSON JsonReader

我们可以JsonReader使用它接受java.io.Reader类型输入流的简单构造函数创建一个实例。
$title(Create JsonReader)
String json = "{}";
JsonReader jsonReader = new JsonReader( new StringReader(json) );
我们可以根据JSON流的来源使用以下读者之一:
  • BufferedReader
  • LineNumberReader
  • CharArrayReader
  • InputStreamReader
  • FileReader
  • FilterReader
  • PushbackReader
  • PipedReader
  • StringReader

4.读取JSON Stream

在创建JsonReader包装有效的JSON源之后,我们可以开始迭代流令牌并查看令牌值。
以下是在令牌上使用表单中的JsonReader读取简单JSON的示例。
$title(JsonReader Example)
import java.io.IOException;
import java.io.StringReader;
 
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonToken;
 
public class Main
{
    public static void main(String[] args) throws Exception
    {
 
        String json = "{'id': 1001,'firstName': 'Lokesh','lastName': 'Gupta','email': null}";
 
        JsonReader jsonReader = new JsonReader(new StringReader(json));
        jsonReader.setLenient(true);
         
        try
        {
            while (jsonReader.hasNext())
            {
                JsonToken nextToken = jsonReader.peek();
                 
                if (JsonToken.BEGIN_OBJECT.equals(nextToken)) {
 
                    jsonReader.beginObject();
 
                } else if (JsonToken.NAME.equals(nextToken)) {
 
                    String name = jsonReader.nextName();
                    System.out.println("Token KEY >>>> " + name);
 
                } else if (JsonToken.STRING.equals(nextToken)) {
 
                    String value = jsonReader.nextString();
                    System.out.println("Token Value >>>> " + value);
 
                } else if (JsonToken.NUMBER.equals(nextToken)) {
 
                    long value = jsonReader.nextLong();
                    System.out.println("Token Value >>>> " + value);
 
                } else if (JsonToken.NULL.equals(nextToken)) {
 
                    jsonReader.nextNull();
                    System.out.println("Token Value >>>> null");
                     
                } else if (JsonToken.END_OBJECT.equals(nextToken)) {
 
                    jsonReader.endObject();
 
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            jsonReader.close();
        }
    }
}
执行输出:
Token KEY >>>> id
Token Value >>>> 1001
 
Token KEY >>>> firstName
Token Value >>>> Lokesh
 
Token KEY >>>> lastName
Token Value >>>> Gupta
 
Token KEY >>>> email
Token Value >>>> null
在上面的例子中:
令牌的键是JsonToken.NAME类型。使用nextName()方法获取密钥名称。
  • 如果hasNext()方法JsonReader有更多的标记,则返回true 的hasNext()方法。
  • PEEK()方法返回下一个令牌JSON,但不移动在它。
  • peek()随后的多次调用将返回相同的JSON令牌。
  • 可以使用JsonToken类的常量检查返回标记的类型。
  • Array的开启和关闭括号'[',并']'与检查beginArray()endArray()方法。
  • Object的开始和结束括号'{''}'并使用beginObject()endObject()方法进行检查。
  • 确定令牌的类型后,获得令牌的使用方法的类似的值nextLong()nextString()nextInt()等。
  • 空文字可以使用任何消耗nextNull()skipValue()
  • 所有next....()方法都返回当前标记的值,并将内部指针移动到下一个标记。
  • 遇到未知名称时,严格的解析器应该失败并出现异常。宽松解析器应该调用skipValue()以递归方式跳过值的嵌套标记,否则可能会发生冲突。

 
标签: java Gson
地址:https://www.leftso.com/article/648.html

相关阅读

前言学习使用Google GSON库将Java对象序列化为JSON表示形式,并将JSON字符串反序列化为等效的Java对象
前言在这个Gson @SerializedName示例中,学习在序列化和反序列化过程中更改json和java对象之间的字段名称
前言在Gson中实现的默认行为是忽略空对象字段
       学习使用Gson JsonReader类,这是一个基于拉的流式JSON解析器,它有助于将JSON作为标记流来读取​GSON1. JsonReader是什么JsonReader是流式...
前言值得一提的是JSON只有数组数据类型
Java通过sourceafis比对指纹图片的相似度判断指纹,sourceafis,Java指纹图片
备受期待的Java Enterprise Edition 8发布了两个令人兴奋的新API(JSON-Binding 1.0和Java EE Security 1.0)并改进了当前的API(JAX...
前言       在本教程中,我们将了解Retrofit 的基础知识以和创建一个android HTTP client请求REST API
Java编程之spring boot FastDFS Java client使用,Java编程,FastDFS Java客户端
Java编程之java static关键字,Java编程,static关键字