2016-04-20 8 views
0

Ich habe folgende JSON-String-ArrayWie filtert man JSON String Array basierend auf Attributen?

[ 
    { 
     "firstName": "Patrick", 
     "lastName": "Smith", 
     "loginName":"[email protected]", 
     "Country":"US", 
     "phoneNumber": "287 125-1434", 
     "status": "340" 
    }, 
    { 
     "firstName": "Bob", 
     "lastName": "Williams", 
     "loginName":"[email protected]", 
     "Country":"US", 
     "phoneNumber": "213 111-9943", 
     "status": "215" 
    }, 
    { 
     "firstName": "John", 
     "lastName": "Johnson", 
     "loginName":"[email protected]", 
     "Country":"DE", 
     "phoneNumber": "212 555-1234", 
     "status": "340" 
    }, 
    { 
     "firstName": "John", 
     "lastName": "Johnson", 
     "loginName":"[email protected]", 
     "Country":"DE", 
     "phoneNumber": "212 555-1234", 
     "status": "215" 
    }, 
    { 
     "firstName": "John", 
     "lastName": "Johnson", 
     "loginName":"[email protected]", 
     "Country":"DE", 
     "phoneNumber": "212 555-1234", 
     "status": "167" 
    }, 
    { 
     "firstName": "George", 
     "lastName": "Jones", 
     "loginName":"[email protected]", 
     "Country":"FR", 
     "phoneNumber": "217 987-2634", 
     "status": "340" 
    } 
] 

und ich brauche nur dieser Teil

{ 
     "firstName": "John", 
     "lastName": "Johnson", 
     "loginName":"[email protected]", 
     "Country":"DE", 
     "phoneNumber": "212 555-1234", 
     "status": "167" 
    } 

indem Werte für loginname und Status

I zurückkehren müssen Erstellen Sie eine Methode wie die folgende.

public String filterJsonArray(String array, String keyOne, Object valueOne, String keyTwo, Object valueTwo) throws ParseException { 

} 

Kann mir jemand eine Idee geben, wie ich das umsetzen könnte.

+2

Google "java json" mit bekommen und eine Bibliothek auswählen. Sobald Sie es versucht haben und stecken geblieben sind, fragen Sie noch einmal. –

Antwort

0

Jackson verwenden, ist dies die gröbsten Snippet ich denken kann:

private static ObjectMapper mapper = new ObjectMapper(); 

public static void main(String[] args) throws IOException { 
    System.out.println(filterJsonArray(JSON, "loginName", "[email protected]", "status", "167")); 
} 

public static String filterJsonArray(String array, String keyOne, Object valueOne, String keyTwo, Object valueTwo) throws IOException { 
    Map[] nodes = mapper.readValue(array, HashMap[].class); 

    for (Map node : nodes) { 
     if (node.containsKey(keyOne) && node.containsKey(keyTwo)) { 
      if (node.get(keyOne).equals(valueOne) && node.get(keyTwo).equals(valueTwo)) { 
       return mapper.writeValueAsString(node); 
      } 
     } 
    } 

    return null; 
} 

Natürlich wird es nur gibt das erste Spiel zu den gegebenen Paaren. Wenn Sie alle Werte benötigen, geben Sie stattdessen eine Liste zurück und füllen Sie sie innerhalb der Schleife auf.

+0

Diesen Satz hier zu schreiben ist wie "Ich will einen Salat" bei MCDonalds ... was ich meine ist, dass es nicht der richtige Ort dafür ist. – dambros

+1

@efthialex Ich mag wie eine Dusche klingen, aber es gibt nicht viel zu erklären. Ihr JSON-Array ist einfach eine Sammlung von JSON-Objekten, die ich zum Analysieren und Darstellen von Jackson als Objects (Sammlung von Maps) verwendet habe. Wenn wir die Objekte zur Hand haben, können wir einfach die Standard-Map-API verwenden, um nach den gewünschten Einträgen zu suchen. Das angegebene Snippet kann generisch genug aussehen, um mit anderen jsons verwendet zu werden. Dies ist jedoch nicht der Fall, da Sie immer nach 2 Werten suchen müssen. Dies ist der Grund, warum ich sagte, es ist grob und es gibt viel Raum für Verbesserungen. – dambros

0

Ich benutze JSONObject und hier ist eine andere Möglichkeit zu analysieren. 1. Parse JSONArray 2. Schleife das Array und in Userprofile lesen Objekte 3. Bewahren Sie es in HashMap Schlüssel

import java.util.HashMap; 
import java.util.Map; 
import org.json.*; 

class UserProfile{ 
    String loginName; 
    int status; 
    String firstName; 
    String key; 

    UserProfile(){ 

    } 

    String getLoginName(){ 
    return loginName; 
    } 

    String getFirstName(){ 
    return firstName; 
    } 

    void setKey(String key){ 
    this.key = key; 
    } 

    void setLoginName(String loginName){ 
    this.loginName = loginName; 
    } 

    void setStatus(int status){ 
    this.status = status; 
    } 

    void setFirstName(String firstName){ 
    this.firstName = firstName; 
    } 
} 

public class JSONObjParser { 

    public static void main(String[] args){ 
    Map<String, UserProfile> map = new HashMap<String, UserProfile>(); 

    String msg ="[{ firstName: Patrick, lastName: Smith, loginName:[email protected], Country:US, phoneNumber: 287 125-1434, status: 340 }, { firstName: Bob, lastName: Williams, loginName:[email protected], Country:US, phoneNumber: 213 111-9943, status: 215 }]"; 
    JSONArray jsonarray = new JSONArray(msg); 
    for (int i = 0; i < jsonarray.length(); i++) { 
     JSONObject jsonobject = jsonarray.getJSONObject(i); 
     String loginName = jsonobject.getString("loginName"); 
     int status = jsonobject.getInt("status"); 
     String firstName = jsonobject.getString("firstName"); 

     UserProfile profile = new UserProfile(); 
     profile.setFirstName(firstName); 
     profile.setLoginName(loginName); 
     profile.setStatus(status); 
     String key = loginName + Integer.toString(status); 
     map.put(key, profile); 
    } 

    for (String key : map.keySet()) { 
     UserProfile profile = map.get(key); 
     System.out.println("Key = " + key + ", FirstName = " + profile.getFirstName()); 
    } 

    } 
} 
Verwandte Themen