2016-05-13 49 views
-1

我試圖解析一些JSON(以下節選),但我收到以下錯誤:我該如何解析這種類型的JSON? (只能遍歷數組或java.lang.Iterable的實例)

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
    Can only iterate over an array or an instance of java.lang.Iterable 

而一個摘錄非常大的json文件:

[ 
    { 
    "normal" : "Le tour change de sens ! Ce n'est pas une action, c'est le joker!" 
    }, 
    { 
    "normal" : "Prends la main de ton voisin de gauche" 
    }, 
    { 
    "normal" : "Fais une déclaration d'amour à la personne en face de toi!" 
    }, 
    { 
    "normal" : "Reste sur les genoux de la personne à ta droite pendant un tour" 
    }, 

自己找出來。下面的代碼:

import org.json.simple.JSONArray; 

import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.io.IOException; 

import org.json.JSONException; 
import org.json.simple.JSONObject; 
import org.json.simple.parser.JSONParser; 
import org.json.simple.parser.ParseException; 


public class ParseJson{ 


    static String printAcounts = ""; 
    public static void main(String[] args) throws FileNotFoundException, IOException, ParseException, JSONException{ 
     JSONParser parser = new JSONParser(); 
     JSONArray objArray = (JSONArray) parser.parse(new FileReader("C:\\Users\\Bogdanel\\Desktop\\Ressources\\normal_actions.json")); 

     for (Object o : objArray){ 
     JSONObject obj = (JSONObject) o; 
     String s = (String) obj.get("normal"); 
     System.out.println(s); 
     } 


    } 
} 

ascasccascascasc

+0

您使用哪個JSON庫? – hexafraction

+0

您所擁有的'JSONArray'類沒有實現'Iterable',因此您不能使用Java的擴展for-loop語法。解決方案將使用'JSONArray'上的方法。例如,如果它有長度或大小或計數和get方法。這將取決於你正在使用的是哪個json庫。 – dsh

回答

4

不要混淆org.json.JSONArrayjavax.json.JsonArray。前者不執行Iterable而後者執行。

Android的使用JSONArray的行爲就像一個典型的JSON值,但它可以像get(index)一樣收集。 JsonArray基本上是List<JsonValue>

總之,使用典型的結構和使用get來代替。

0

JSONArray不像常規數組,因此您無法用foreach循環(Java中的高級)迭代它。你可以參考這個answer,但基本上使用一個正常的循環,並得到這樣的項目

objArray.getJSONObject(i).getString("someKey"); 
相關問題