2017-09-15 6 views
0

Utilisation de la bibliothèque de chemin JSON java: https://github.com/json-path/JsonPathRetour Java JsonPath comme une chaîne JSON

Étant donné un JSON comme celui-ci

{ 
    "store": { 
     "book": [ 
      { 
       "category": "reference" 
      }, 
      { 
       "category": "fiction" 
      } 
     ], 
     "bicycle": { 
      "color": "red", 
      "price": 19.95 
     } 
    }, 
    "expensive": 10 
} 

Je voudrais revenir « livre » comme une liste de chaînes. Pour exemples:

List<String> results = JsonPath.read(example, "$.store.book[*]"); 

et les résultats devraient ressembler à:

["{\"category\":\"reference\"}", "{\"category\":\"fiction\"}"] 

Yat-il un moyen d'y parvenir?

Actuellement:

System.out.println(udf.jsonExtractScalar(testExample, "$.store.book[*]").getClass().getName()); 
--> net.minidev.json.JSONArray 
+1

Quel est le problème? 'JSONArray' est un sous-type de' List', et dans ce cas arrive à contenir des chaînes. –

+0

Comme le livre est un JsonArray dans votre arbre json, vous pouvez JsonArray tupe et récupérer les données de celui-ci et l'ajouter à la liste. –

Répondre

0

Comme livre est un JsonArray en vous arbre JSON, vous pouvez utiliser le type JsonArray et récupérer les données et ajouter à la liste.

Voici un exemple.

JSONArray jsonArray = new JSONArray(jsonArrayString); 
List<String> list = new ArrayList<String>(); 
for (int i=0; i<jsonArray.length(); i++) { 
list.add(jsonArray.getString(i)); 

Remplacez jsonArrayString par le nom du tableau de livres de votre jsondata et vous serez prêt à partir.

La classe utilisée sera la classe JSONArray qui est

`org.json.JSONArray` 
+0

Quelle classe 'JSONArray' est-ce? –

+0

Ce serait androids propre classe. –

+0

S'il vous plaît ajouter cela à votre réponse et expliquer pourquoi ils devraient l'utiliser sur ce qu'ils ont déjà, à savoir. Le 'JsonPath' de Jayway avec' net.minidev.json.JSONArray'. –