如何读取多个 JSON 行(行分隔)?

run*_*aul 2 java rest json jackson

我从 url 获取以下 json:

{"bytes": 5043, "name": "a", "timestamp": "11-Apr-2017 12:11:51", "ds": "Lab1"}
{"bytes": 0, "name": "b", "timestamp": "11-Apr-2017 12:11:51", "ds": "Lab1"}
{"bytes": 11590, "name": "c", "timestamp": "11-Apr-2017 12:11:51", "ds": "Lab1"}
Run Code Online (Sandbox Code Playgroud)

我想返回每行的字节。使用 Jackson 我尝试按如下方式解析它(注意:json 保存到文件中以进行测试):

package JsonRead;

import java.io.File;
import java.io.IOException;

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

public class JacksonTreeModelLogStorage {
    public static void main(String[] args) {

        try{

            ObjectMapper mapper = new ObjectMapper();

            JsonNode root = mapper.readTree(new File("JsonRead/json2.json"));

            JsonNode logStorageNode = root;

            for(JsonNode node : logStorageNode){
                String bytesUsed = node.path("bytes").asText();
                System.out.println("Bytes Used: " + bytesUsed);
            }

        } catch(IOException e){
                System.out.println("IO Exception " + e );
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这将返回以下内容:

Bytes Used: 
Bytes Used: 
Bytes Used: 
Bytes Used: 
Run Code Online (Sandbox Code Playgroud)

如果我将 for 循环更改为以下内容,我可以看到我正在返回 json 的第一行:

for(JsonNode node : logStorageNode){
            String json = node.asText();
            System.out.println("json: " + a);
}
Run Code Online (Sandbox Code Playgroud)

如何获取 json 所有行的字节数?

run*_*aul 6

多谢你们。这是一个很大的帮助。

我稍微编辑了一下尝试以满足我的需要。这就是我最终得到的结果:

ObjectMapper mapper = new ObjectMapper();
    try(
            FileReader reader = new FileReader("JsonRead/json2.json");
            BufferedReader bufferedReader = new BufferedReader(reader);
        ) {
            String currentLine;
            while((currentLine=bufferedReader.readLine()) != null) {
                Vault vlt = mapper.readValue(currentLine, Vault.class);
                System.out.println(vlt.getBytes());
            } 
        }
Run Code Online (Sandbox Code Playgroud)