Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Parsing JSON with a random field (java)

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

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"
    }
  }
}

I'm trying to do it with 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();
    }

}
}

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

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

generated by Firebase

like image 685
Arlet09 Avatar asked Nov 19 '25 02:11

Arlet09


1 Answers

Usually it is easiest to just model Java DTO classes holding the data.

So in your JSON you have an object -let us say wrapper -that contains another object having label PATIENT. And because the fields that PATIENT has are arbitrary names AND it also seems that the data each field contain is actually the Patient it thus suggest that PATIENT is a Map having those arbitrary field names as the keys and instances of patienta as the values of each entry.

So the Wrapper would be like:

@Getter
public class Wrapper {
    // We want the correct notation & plural, of course
    @SerializedName("PATIENT") 
    private Map<String, Patient> patients;
}

The Patient would be then like:

@Getter
public class Patient {
    private String name;
    private Integer age;
}

Deserialisation nad using would then be something like:

Wrapper w = gson.fromJson(new FileReader("c:\\file.json"), Wrapper.class );
w.getPatients().keySet().... // or however it is most comfortable
like image 173
pirho Avatar answered Nov 21 '25 20:11

pirho