it-roy-ru.com

получить данные о базе данных в формате json

Я хотел бы получить данные, хранящиеся в базе данных firebase, но в правильном формате Json, проблема в том, что при использовании String.valueOf(dataSnapshot.getValue()) это не правильный формат json . Например, если данные

{
  "properties" : {
     "last_update" : "15-02-2017 02:48:00 pm",
     "last_update_code" : "1258884"  
  } 
}

возвращаемое значение становится таким 

properties = {last_update = 15-02-2017 02:48:00 pm,last_update_code = 1258884}

без кавычек или (:).

так есть ли способ получить данные в виде строки в первом формате?

3
yoyo

очевидно, класс pojo - самый аккуратный и самый простой способ достижения моей цели

первый

создал классы, которые представляют мой файл JSON:

для этого файла JSON:

{ "данные" : { "текст": { "загрузка": { "intro_text": "hi" } }}}

создать эти классы:

pojo, данные, текст, загрузка такая:

public class Pojo{
    private Data data;

    public void setData(Data data){
        this.data = data;
    }
    public Data getData(){
        return this.data;
    }

public class Data {
    private Text text;

    public void setText(Text text){
        this.text = text;
    }
    public Text getText(){
        return this.text;
    }
}

public class Text {
    private Loading loading;

    public void setLoading(Loading loading){
        this.loading = loading;
    }
    public Loading getLoading(){
        return this.loading;
    }
}

public class Loading {
    private String intro_text;

    public void setIntro_text(String intro_text){
        this.intro_text = intro_text;
    }
    public String getIntro_text(){
        return this.intro_text;
}

}

Второй

примените этот метод к этой части файла Предполагая, что (data) является первым подузлом в файле json, поэтому is ref = "" (без ссылки, поскольку это первый узел)

 Database database = FirebaseDatabase.getInstance();
 DatabaseReference databaseReference = database.getReference("");
 databaseReference.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        Pojo pojo = dataSnapshot.getValue(Pojo.class);
        Gson gson = new Gson();
        String reqJson= gson.toJson(pojo);
        return reqJson
    }
1
yoyo

Вы получите возвращаемое значение, которое вы получите, когда попытаетесь преобразовать json в String.

Таким образом, вместо этого вы можете использовать один из следующих методов:

Первый :-

String lastUpdate = dataSnapshot.child(last_update).getValue(String.class);
String last_update_code = dataSnapshot.child(last_update_code).getValue(String.class);

Второе: -

Определите POJO, который отображается на ваш Json. После этого используйте следующий код.

YourPOJO yourPOJO = dataSnapshot.getValue(YourPOJO.class);

Вы можете прочитать больше об этом здесь .

5
Rohan Stark

Одним из подходов является использование Gson для преобразования результата в строку json, например.

String jsonString = gson.toJson(dataSnapshot.getValue());
3
John O'Reilly

Вот что я делаю. Сначала создайте объект Java из DataSnapshot, затем получите JSON из этого объекта с помощью Gson.

Object object = datasnapshot.getValue(Object.class);
String json = new Gson().toJson(object);
1
minhazur

Другим возможным методом может быть использование прочитанных данных на основе URL. Если вы знаете корень, который содержит файл JSON. Просто добавьте .json в конец ссылочного URL-адреса узла, и его можно прочитать как файл json, используя http. В качестве примера рассмотрим следующее https://database-name.firebaseio.com/profiles/key.json Разрешение может быть открытым или авторизованным и может быть проверено перед выполнением запроса. 

0
ap14