使用随机字段解析JSON(java) [英] Parsing JSON with a random field (java)

查看:134
本文介绍了使用随机字段解析JSON(java)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想将JSON文件转换为CSV文件.

I want to convert a JSON file into a CSV file.

我的JSON文件来自存储在Firebase中的DataBase,并且具有如下结构:

My JSON file comes from a DataBase stored in Firebase and has an structure like this:

{
  "PATIENT" : {
     "-LbhwHC7Y6_umc" : {
       "age" : 31,
       "name" : "Phoebe"
    },
    "-LbhwTFJ6xjEf" : {
      "age" : 20,
      "name" : "Amy"
    },
    "-LbhxUmJ_dwIC" : {
      "age" : 28,
      "name" : "Joe"
    }
  }
}

我正在尝试使用Gson:

package Parser;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import com.google.gson.Gson;


public class Main {

public static void main(String[] args) {

    Gson gson = new Gson();

    try {

        BufferedReader br = new BufferedReader(
            new FileReader("c:\\file.json"));



    } catch (IOException e) {
        e.printStackTrace();
    }

}
}

我的问题是我不知道如何使用随机字段创建JSON对象:

My problem is that I don't know how to create a JSON object with random fields like:

-LbhwHC7Y6_umc",-LbhwTFJ6xjEf"和"-LbhxUmJ_dwIC"

"-LbhwHC7Y6_umc", "-LbhwTFJ6xjEf" and "-LbhxUmJ_dwIC"

由Firebase生成

generated by Firebase

推荐答案

使用Jackson库,您已经在一个库中为JSONCSV映射了.读取您的JSOn并生成CSV的简单示例:

Using Jackson library you have already mapper for JSON and CSV in one library. Simple example which reads your JSOn and generate CSV:

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SequenceWriter;
import com.fasterxml.jackson.dataformat.csv.CsvMapper;
import com.fasterxml.jackson.dataformat.csv.CsvSchema;

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

public class JsonApp {

    public static void main(String[] args) throws Exception {
        File jsonFile = new File("./resource/test.json").getAbsoluteFile();

        // read JSON
        ObjectMapper mapper = new ObjectMapper();
        JsonNode root = mapper.readTree(jsonFile);
        JsonNode patient = root.get("PATIENT");

        // Write CSV
        CsvMapper csvMapper = new CsvMapper();
        CsvSchema schema = CsvSchema.builder()
                .addColumn("age", CsvSchema.ColumnType.NUMBER)
                .addColumn("name")
                .setUseHeader(true)
                .build();
        try (SequenceWriter sequenceWriter = csvMapper.writer().with(schema).writeValues(System.out)) {
            patient.elements().forEachRemaining(node -> {
                try {
                    sequenceWriter.write(node);
                } catch (IOException e) {
                    throw new IllegalStateException(e);
                }
            });
        }
    }
}

打印:

age,name
31,Phoebe
20,Amy
28,Joe

通常,当JSON有效负载中具有随机密钥时,可以在JacksonGson库中将其反序列化为Map<String, Object>.

Generally, when you have random keys in JSON payload you can deserialise it to Map<String, Object> in Jackson and Gson libraries.

请参见:

  • jackson-dataformats-text - CSV
  • jackson-databind - JSON

这篇关于使用随机字段解析JSON(java)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆