`
NeverFlyAway
  • 浏览: 69562 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类

读取json并解析成JsonNode树

阅读更多

项目中需要解析一个200M的json目录文件,然后根据需要读取field

 

 

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;


import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

public class ReadJsonFile {
	
	private ObjectMapper mapper = new ObjectMapper();
	
	public JsonNode readAsTree(Path jsonPath) throws Exception, IOException {
		JsonNode jsonNode =  mapper.readTree(Files.newInputStream(jsonPath));
		return jsonNode;
	}

}

 从路径为jsonPath的文件中读取了json字符串,然后转换成JsonNode

 

 

 

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SequenceWriter;

public class WriteJsonFile {

	private ObjectMapper mapper = new ObjectMapper();

	public void writeJsonFile(JsonNode rootNode, Path outputPath) throws IOException {
		SequenceWriter writer = mapper.writerWithDefaultPrettyPrinter()
				.writeValues(Files.newOutputStream(outputPath));
		writer.write(rootNode);
		writer.close();
	}
	
}

 把JsonNode对象转成json字符串写入到某个文件中,也可以是其他类型的对象

 

 

 

	public void handleElements(JsonNode arrayNode) {
		Iterator<JsonNode> realElements = arrayNode.elements();
		while (realElements.hasNext()) {
			JsonNode realElement = realElements.next();
			System.out.println(realElement.toString());
		}
	}

 如果是一个JsonNode数组,比如这里的arrayNode,使用arrayNode.elements();读取数组中每个node

 如果不是JsonNode数组arrayNode.elements();返回arrayNode的values

 

	public void traverseJson(JsonNode jsonNode) throws IOException {
		Iterator<String> fieldNames = jsonNode.fieldNames();
		while (fieldNames.hasNext()) {
			String fieldName = fieldNames.next();
			System.out.println(fieldName);
		}
	}

 jsonNode的fieldNames就是该jsonNode的所有的key值

 

 

 

	public void traverseJson(JsonNode jsonNode) {
		Iterator<Entry<String, JsonNode>> jsonNodes = jsonNode.fields();
		while (jsonNodes.hasNext()) {
			Entry<String, JsonNode> node = jsonNodes.next();
			System.out.println(node.getKey());
			System.out.println(node.getValue().toString());
		}
	}

 类似Map的Entry方式遍历某个JsonNode的key和value

 

 value可能是字符串也可能是子jsonNode,但如果value是jsonNode数组的话,是无法读取的

 

 

	public void traverseJson(JsonNode jsonNode) {
		List<JsonNode> jsonNodes = jsonNode.findParents("fieldName");
		System.out.println(jsonNodes.size());
	}

 取出所有key值为fieldName的JsonNode的List

 

 

	public void traverseJson(JsonNode jsonNode) {
		List<JsonNode> jsonNodes = jsonNode.findValues("fieldName");
		System.out.println(jsonNodes.size());
	}

 取出所有key值为fieldName对应的value,这些values就是JsonNode的List

 

 但是如果value中包含子jsonNode并且子jsonNode的key值也为fieldName,是无法捕获到并加入list的

 

 

	public void traverseJson(JsonNode jsonNode) {
		JsonNode node1 = jsonNode.findValue("fieldName");
		JsonNode node2 = jsonNode.findPath("fieldName");
	}

 取出key值为fieldName的一个value,匹配到一个就停止搜索,并且返回value

 

 node1和node2的区别在于,如果没有匹配到任何key值为fieldName,node1为null,node2为空JsonNode

 类似于

		List<String> node1 = null;
		List<String> node2 = new ArrayList<>();

 

	public void traverseJson(JsonNode jsonNode) {
		//{"name" : "xiaoLi"}
		String name = jsonNode.findValue("name").asText();
		System.out.println(name);
	}

 如果value为String,可以这样读取,其他类型可以jsonNode.findValue("name").asInt();

 

	public void traverseJson(JsonNode jsonNode) {
		jsonNode.forEach((JsonNode node)->{
			System.out.println(node.toString());
		});
	}

 如果是JDK1.8的话,可以这样遍历JsonNode的子节点

 

以上

 

 

 

 

分享到:
评论

相关推荐

    Java读取json文件,并转化为map取值

    在Java编程中,处理JSON数据...Jackson库提供了丰富的API来应对这些情况,如`@JsonProperty`注解用于指定字段映射,`JsonNode`类用于处理JSON树等。不断探索和熟练使用这些工具,将使你在处理JSON数据时更加得心应手。

    经典ASP读取JSON字符串/生成JSON对象,数组对象等。

    这个文件可能包含了读取JSON数据的示例代码,可能包括从文件、数据库或其他数据源读取JSON,然后使用ASPJSON库进行解析和操作。 总结,经典ASP处理JSON主要依赖于第三方库,如`aspjson`。通过学习这些技术,开发者...

    Node.js-load-json-file-读取和解析JSON文件

    一旦安装完成,你可以通过`require`来引入该模块,并使用其提供的函数来读取和解析JSON文件。以下是一个基本示例: ```javascript const loadJsonFile = require('load-json-file'); loadJsonFile('./path/to/your...

    读取JSON格式转为DevExpress TreeList 树形(晨曦CZB)

    // 读取JSON文件内容 var treeNodes = JsonConvert.DeserializeObject&lt;List&lt;TreeNode&gt;&gt;(jsonData); ``` 步骤3:填充DevExpress TreeList 有了解析好的数据,我们就可以将其填充到TreeList控件中。首先确保在Form...

    Unity读取json数据(包含LitJson和JSONobject下载地址).rar

    本教程将围绕Unity如何读取JSON数据进行讲解,并提供两种常用的库——LitJson和JSONObject。 首先,我们来看`ReadJson.cs`文件,这是Unity中处理JSON数据的核心代码。在Unity中,我们通常会创建一个C#类来映射JSON...

    json解析源代码

    本教程将深入探讨如何在C#中解析JSON,并将其数据展示在TreeView控件上。 首先,我们需要引入一个JSON库来帮助我们解析JSON字符串。在.NET框架中,微软提供了一个名为`System.Text.Json`的内置库,自.NET Core 3.0...

    idea Java 解析json文件并导入mysql数据库

    本教程将详细讲解如何在Idea中使用Java解析JSON文件,并将数据有效地导入到MySQL数据库。 首先,我们需要理解JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器...

    java读取json

    本文将深入探讨如何使用Java读取JSON数据,包括解析JSON字符串、处理JSON对象以及操作JSON数组。 首先,Java提供了多种库来处理JSON,其中最常用的两个是Jackson和Gson。这里我们将主要介绍Jackson库,它功能强大且...

    Android XML和JSON解析代码

    3. **org.json库**:Android自带的JSON解析库,支持将JSON字符串转换为`JSONObject`和`JSONArray`,并提供相关的方法进行解析。 4. **Fastjson库**:阿里巴巴的高性能JSON库,适用于大量数据处理。 ### Android...

    java 读取文本并解析字符串

    3. **JSON解析**:如果字符串是JSON格式,可以使用如`org.json`库或`com.google.gson`库来解析。以下是一个使用Gson的例子: ```java import com.google.gson.Gson; String jsonStr = "{\"name\":\"John\", \...

    Electron项目:读写本地json文件,实现用户登录、修改用户信息,窗口最小化,最大化,关闭窗口

    Node.js的`fs`模块提供了读写文件的能力,例如`fs.readFile()`和`fs.writeFile()`,可以用来读取和保存JSON数据到本地文件。 3. **用户登录**: 用户尝试登录时,通常会提供用户名和密码。在正常情况下,这些信息...

    动态解析json串到dw

    由于PowerBuilder内置对JSON的支持有限,开发者可能需要引入如JsonSimple、Gson或Jackson等库的PowerBuilder版本,或者使用JavaScript脚本引擎(如JScript或VBScript)来调用浏览器或Node.js中的JSON解析功能。...

    jsonstreamtoobject将JSON流解析为对象

    总结来说,`json-stream-to-object`是JavaScript开发中的一个实用工具,它帮助开发者有效地解析JSON流数据,转化为可操作的对象。通过理解和使用这个库,可以提升处理JSON数据的效率,同时减少内存消耗,尤其是在...

    android json与xml解析 例子 demo

    一、JSON解析 1. JSON简介: JSON(JavaScript Object Notation)是一种简洁且易于阅读的数据格式,它基于JavaScript的一个子集。JSON支持两种基本结构:对象(键值对的集合,用花括号`{}`包围)和数组(有序的值...

    json解析程序(未完成)

    - 解析JSON字符串成Java对象:使用上述库提供的方法,如Jackson的`ObjectMapper.readValue()`或Gson的`Gson.fromJson()`,将JSON字符串转化为指定类型的Java对象。 - 解析JSON到Map/ArrayList:如果不确定JSON的...

    java中json的封装和解析

    如果JSON数据存储在文件中,可以使用`ObjectMapper.readTree`读取JSON文件到JsonNode对象,然后进一步解析;也可以使用`ObjectMapper.writeValue`将Java对象写入JSON文件。 总结,Java中处理JSON数据的关键在于选择...

    GRIB2 数据 转 JSON

    JSON(JavaScript Object Notation)则是一种轻量级的数据交换格式,易于人阅读和编写,同时也方便机器解析和生成。在现代数据分析和Web应用中,JSON因其易读性和通用性而被广泛应用。 本资源提供了将GRIB2数据转换...

    JAVA 解析 JSON 数据(包齐全)

    4. **解析JSON对象**:如果你已经有一个`JsonNode`对象,可以通过`findValue`,`get`等方法获取JSON对象的属性。 ```java JsonNode node = mapper.readTree(jsonString); String value = node.get("propertyName...

    android各种解析xml三种方式和json数据

    在Android中,常用的JSON解析库有Gson和Jackson。 1. Gson解析: Gson库是由Google提供的,可以直接将JSON字符串转换为Java对象,反之亦然。以下是一个使用Gson的例子: ```java String json = "{\"name\":\"John\...

    node-readjson:读取文件并将其解析为json

    读取文件并将其解析为json。 安装 npm i readjson --save 如何使用? const readjson = require ( 'readjson' ) ; const json = await readjson ( './package.json' ) ; // throws if file not found readjson ....

Global site tag (gtag.js) - Google Analytics