JSR-367: как связать простой json с объектом и извлечь данные

Как связать json файл в объект. Здесь я использую API JSR-367 для реализации.

Файл JSON выглядит так

{
  "Details": [
    {
      "age": 27,
      "gender": "Male",
      "name": "John"
    },
    {
      "age": 27,
      "gender": "Male",
      "name": "Max"
    },
    {
      "age": 27,
      "gender": "FeMale",
      "name": "esh"
    }
  ]
}

Для вышеупомянутого json я создал два класса Binding,
Это для объектов массива, которые представлены в json,

1.

public class Details 
{
        private String name;
        private int age;
        private String gender;
        private long phoneNumber;

        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        public String getGender() {
            return gender;
        }
        public void setGender(String gender) {
            this.gender = gender;
        }
        public long getPhoneNumber() {
            return phoneNumber;
        }
        public void setPhoneNumber(long phoneNumber) {
            this.phoneNumber = phoneNumber;
        }
}

и это для массива деталей
2)

 public class Root 
 {
    private Details[] details;

    public Details[] getDetails() {
        return members;
    }   
 }

Это основной класс для связывания классов из json файл в объект

public class TestJsonB 
{
    static final String JSON_FILE = "/media/Resources/Details.json";
    public static void main(String[] args) throws IOException 
    {    
        String content = new String(Files.readAllBytes(Paths.get(JSON_FILE)));
        Jsonb jsonB = JsonbBuilder.create();
        Root root = jsonB.fromJson(content,Root.class);
        Details[] details = root.getDetails();
        System.out.println(details);//null printing
    }
}

Помогите мне написать обязательные классы для данного json файл.

1 ответ

Пожалуйста, проверьте это решение может быть полезным.

Я сделал несколько изменений в вашем Root.java

package com.test;

import java.util.ArrayList;

/**
 * 
 * @author Ravi P
 */
public class Root {

    ArrayList<Details> details;

    public ArrayList<Details> getDetails() {

        return details;
    }

    public void setDetails( ArrayList<Details> details ) {

        this.details = details;
    }
}

Основной Java-класс

package com.test;

import java.nio.file.Files;
import java.nio.file.Paths;

import javax.json.bind.Jsonb;
import javax.json.bind.JsonbBuilder;

/**
 * 
 * @author Ravi Palla
 */
public class Test {

    static final String JSON_FILE = "C:\\tmp\\Details.json";

    public static void main( String[] args ) {

        try {

            String content = new String( Files.readAllBytes( Paths.get( JSON_FILE ) ) );

            Jsonb jsonb = JsonbBuilder.create();

            Root root = jsonb.fromJson( content, Root.class );

            Details[] details = root.getDetails().toArray( new Details[ root.getDetails().size() ] );

            for ( Details memberDetails : details ) {

                System.out.print( "name: " + memberDetails.getName() + ", " );
                System.out.print( "age: " + memberDetails.getAge() + ", " );
                System.out.println( "gender: " + memberDetails.getGender() );
            }

        } catch ( Exception e ) {

            e.printStackTrace();
        }
    }
}

Выход:

name: John, age: 27, gender: Male
name: Max, age: 27, gender: Male
name: esh, age: 27, gender: FeMale
Другие вопросы по тегам