# Search Value in Json



## Winfo606 (31. Aug 2016)

Guten Tag Zusammen,

ich habe ein Problem beim Parsing einer Json-Datei / Json-String.

Ich habe zum Beispiel folgenden Json-String, den ich bereits eingelesen habe.


```
{
    "elements":
    [
        {
            "id": "1234",
            "Key": "1234-name2",  
             "name": "name2",
            "projectName": "TestProject",       
        },
        {
            "id": "5678",
            "applicationKey": "5678-name2",
            "name": "name2",
            "projectName": "TestProject2",
        },
       {
            "id": "9101112",
            "applicationKey": "9101112-name3",
            "name": "name3",
            "projectName": "TestProject3",
        },
    ],
    "totalSize": 3
}
```

Nun möchte ich die Json nach "Testproject2" durchsuchen und wenn er fündig wird, soll er mit noch zusätzlich das Attribut "name" und "id" ausgeben. 
Also in diesem Beispiel:
*Suche* nach "TestProject2"  und *Ausgabe* "name2" und "5678".

Ist das möglich?

Ich hab schon versucht das irgendwie über den ObjectMapper zu versuchen.

```
JsonNode node = new ObjectMapper().readTree(JsonString);
```
Allerdings weiß ich dann nicht, wie ich weiter verfahren muss.


----------



## Thallius (31. Aug 2016)

Wieso willst du mit dem JSON arbeiten? Das macht man nicht. JSON ist ein transport format. Lese das JSON z.B. in eine ArrayList<myObject> ein und arbeite dann damit. Da braucht du dir dann nur das Object raussuchen das du brauchst und hast direkt Zugriff aus alle anderen Attribute.

Gruß

Claus


----------



## Winfo606 (31. Aug 2016)

Ich hole mir über ein HTTPGet-Request den Json-Inhalt (Accept: application/json; Content-Type: application/json).

Meinst du dann diesen Inhalt in einen Array?

Vielen Dank für die schnelle Antwort!


----------



## Flown (31. Aug 2016)

Ich würde das mit JSONPath versuchen (ist das Pendant zu XPath).


----------



## Winfo606 (31. Aug 2016)

Ich habe jetzt ein gutes Beispiel hier gefunden.

Dieser hat den folgenden Json String verwendet:


```
String jsonString  = "{" +
                                "   \"MyResponse\": {" +
                                "       \"count\": 3," +
                                "       \"listTsm\": [{" +
                                "           \"id\": \"b90c6218-73c8-30bd-b532-5ccf435da766\"," +
                                "           \"simpleid\": 1," +
                                "           \"name\": \"vignesh1\"" +
                                "       }," +
                                "       {" +
                                "           \"id\": \"b90c6218-73c8-30bd-b532-5ccf435da766\"," +
                                "           \"simpleid\": 2," +
                                "           \"name\": \"vignesh2\"" +
                                "       }," +
                                "       {" +
                                "           \"id\": \"b90c6218-73c8-30bd-b532-5ccf435da766\"," +
                                "           \"simpleid\": 3," +
                                "           \"name\": \"vignesh3\"" +
                                "       }]" +
                                "   }" +
                                "}";
```

Dann habe ich den Code so abgeändert, dass ich zusätzlich noch Attribute auslesen kann.


```
JSONObject jsonObject = new JSONObject(jsonString  );
                        JSONObject myResponse = jsonObject.getJSONObject("
MyResponse
");
                        JSONArray tsmresponse = (JSONArray) myResponse.get("listTsm");
                        ArrayList<String> list = new ArrayList<String>();
                        for(int k=0; k<tsmresponse.length(); k++){
                            list.add(tsmresponse.getJSONObject(k).getString("name"));
                            System.out.println(list.get(k));
                            if (tsmresponse.getJSONObject(k).getString("name").equalsIgnoreCase("vignesh2")){
                                System.out.println(tsmresponse.getJSONObject(k).getString("id"));
                            }
```


Allerdings wenn ich das auf meinen Json String anpassen möchte, bekomme ich immer nur "JSONObject["elements"] is not a JSONObject." 

Warum ist mein JSON-String kein JSON-Object ? :-(


----------



## Thallius (31. Aug 2016)

Weil es ein JSONArray ist?


----------



## Winfo606 (31. Aug 2016)

Ich hab es nun hinbekommen, danke!


```
JSONObject jsonObject = new JSONObject(PaListContent);                       
                        JSONArray myResponse = jsonObject.getJSONArray("elements");
                       
                        ArrayList<String> list = new ArrayList<String>();

                        for(int k=0; k<myResponse.length(); k++){
                            list.add(myResponse.getJSONObject(k).getString("name"));
                           
                            if (myResponse.getJSONObject(k).getString("name").equalsIgnoreCase("XXXX")){
                                System.out.println(myResponse.getJSONObject(k).getString("id"));
                            }
```


----------

