2010-09-13 5 views
1

[J'ai du code pour créer un tableau JSON. Dans ce code, je passe certaines valeurs à x, y, z dans une boucle qui ressemble à ceci.JSON pour Java, Encoder un tableau JSON - Diffusion en continu

JSONArray list = new JSONArray(); 
    String jsonText = null; 
    for (int j = 0; j < 4; j++) { 
     list.add(new Integer(x)); 
     list.add(new Integer(y)); 
     list.add(new Integer(z)); 
     jsonText = list.toString(); 
    } 
    System.out.print(jsonText); 

Cela donne une sortie comme

[1234,245,10,312,234,122,1234,67788,345,235,001,332]

Comment puis-je obtenir ces valeurs dans un seul tableau comme celui-ci?

[[1234,245,10],[312,234,122],[1234,67788,345],[235,001,332]]
] J'ai eu la réponse à cette question a besoin de réponse pour la question ci-dessous.

J'ai utilisé l'une des solutions ci-dessous. Merci pour la réponse de votre part.

Maintenant j'ai obtenu des tableaux imbriqués formate JSON qui ressemble à ceci

[ 
[[1234,245,10],[312,234,122],[1234,67788,345],[235,001,332]], 
[[1234,245,10],[312,234,122],[1234,67788,345],[235,001,332],[1234,67788,3450]], 
[[1234,245,10],[312,234,122],[1234,67788,345],[235,001,332],[1234,67788,34534]]] 

SO i ont un grand tableau qui contient trois tableaux (cela peut être 2 ou plus de trois tableaux parfois) et chacun de ces trois choix contient des tableaux, dans cet exemple ci-dessus

quelle est la procédure inverse? Je veux dire que si je veux ces valeurs de ces tableaux. De la même manière que j'ai fait. en utilisant JSON JSONArray list = new JSONArray(); list.get() cette méthode get me donnera ce que je requies? J'ai utilisé l'API Java org.json.

Merci amis pour m'aider jusqu'à maintenant.

+0

Cette dernière ligne (l'exemple de sortie) est-elle correcte? –

+0

Désolé, la sortie est quelque chose comme ça [1234,245,10,312,234,122,1234,67788,345,235,001,332] Pouvez-vous s'il vous plaît dire comment obtenir la sortie ci-dessus liek ce [1234,245,10] [312,234,122] [1234,67788,345] ] [235,001,332] – jimmy

+0

Etes-vous sûr que c'est la sortie que vous voulez? Basé sur la question originale, je m'attendrais à ce que la sortie désirée soit [[1234,245,10], [312,234,122], [1234,67788,345], [235,001,332]] '(c'est-à-dire un tableau de tableaux imbriqués) plutôt que '[1234,245,10] [312,234,122] [1234,67788,345] [235,001,332]' (c'est-à-dire une chaîne qui ressemble à des tableaux sans aucune séparation). La seconde n'a pas vraiment de sens, car elle n'est pas correcte JSON à moins que vous ne l'enveloppiez dans des guillemets '" ', et alors ce serait une chaîne, pas une série de tableaux parsables par JSON – Chadwick

Répondre

2

je soupçonne que ce que vous voulez est un tableau JSON syntaxiquement correct de tableaux imbriqués d'entiers (demandes de poste d'origine JSON invalide). Sinon, passez à @BalusC's answer.

Pour obtenir une matrice contenant des sous-matrices, créez simplement les sous-matrices en tant que matrices int[] et ajoutez-les directement à votre JSONArray principal.

public int[] getThreeValues() { // example 
    Random r = new Random(); 
    return new int[] { r.nextInt(100), r.nextInt(100), r.nextInt(100) }; 
} 

public void execute() { 

    JSONArray master = new JSONArray(); 

    for (int j=0; j<4; j++) { 
     master.put(getThreeValues()); 
    } 

    System.out.println(master); 
} 

Résultat:

[[3,13,37],[24,4,64],[61,2,1],[97,13,86]]

Note: Je ne sais pas quelle bibliothèque JSON votre utilisant, donc je l'org.json Java API, qui utilise put(...) plutôt que add(...). En outre, cette bibliothèque particulière prend en charge l'ajout de tableaux int [] directement à JSONArray - le vôtre peut ne pas l'être, auquel cas vous devez créer les tableaux JSON imbriqués et les ajouter à votre maquette.

4

Il suffit de le mettre dans un autre JSONArray.

JSONArray array = new JSONArray(); 
array.add(list); 
String jsonText = array.toString(); 

Mise à jour: selon votre commentaire:

Désolé, la sortie est quelque chose comme ça

[1234,245,10,312,234,122,1234,67788,345,235,001,332] 

Pouvez-vous s'il vous plaît dire comment obtenir la sortie ci-dessus comme ceci

[1234,245,10][312,234,122][1234,67788,345][235,001,332] 

Plusieurs façons:

  1. Concatenate au jsonString.

    String jsonText = ""; // Start with empty string. 
    for (int j = 0; j < 4; j++) { 
        JSONArray list = new JSONArray(); // Create new on each iteration. 
        list.add(new Integer(x)); 
        list.add(new Integer(y)); 
        list.add(new Integer(z)); 
        jsonText += list.toString(); // += concatenates to existing string. 
    } 
    System.out.print(jsonText); 
    
  2. Depuis cordes concaténation en utilisant += dans une boucle est monopolisant mémoire et lente, utiliser plutôt StringBuilder.

    StringBuilder jsonText = new StringBuilder(); 
    for (int j = 0; j < 4; j++) { 
        JSONArray list = new JSONArray(); 
        list.add(new Integer(x)); 
        list.add(new Integer(y)); 
        list.add(new Integer(z)); 
        jsonText.append(list.toString(); 
    } 
    System.out.print(jsonText.toString()); 
    
+0

J'ai deux réponses différentes: une avec des tableaux concaténés et une avec des tableaux imbriqués. La solution de @ chadwick Merci pour les réponses que vous êtes génial. pour l'aide. – jimmy

+0

Il s'agit d'utiliser les pouvoirs de la pensée logique humaine. Il est cependant triste que votre question initiale était complètement fausse. – BalusC

+0

Oui, je suis d'accord avec vous, mais comme je l'ai dit je dois utiliser à la fois pour les réponses urs et @ Chadwick. Buts ma faute que j'aurais dû demander à la fois les aproches. Votre réponse m'aide avec Chaîne de noms que je recherche. – jimmy

0

Vous pouvez toujours mettre la liste à l'intérieur d'un JSONArray

par exemple

JSONArray list = new JSONArray(); 
    String jsonText = null; 
    for (int j = 0; j < 4; j++) { 
     list.add(new Integer(x)); 
     list.add(new Integer(y)); 
     list.add(new Integer(z)); 
    } 

    JSONArray finalList = new JSONArray(); 
    finalList.put(0, list); 
    jsonText = finaList.toString(); 
    System.out.print(jsonText); 

Ou (pas du tout recommandé) pirater votre sortie,

par exemple

jsonText += "[" + jsonText + "]"; 
System.out.print(jsonText);