2016-08-10 16 views
0

会社の一覧を印刷しようとしています。JSON配列の解析

私のJSONオブジェクト:

{ 
    "Name": "crunchify.com", 
    "Author": "App Shah", 
    "Company List": [ 
     "Compnay: eBay", 
     "Compnay: Paypal", 
     "Compnay: Google" 
    ] 
} 

コード:

public class ProductTypeParser { 

    public void parseJson(JSONObject jsonObject) throws ParseException { 



     JSONObject object = (JSONObject) jsonObject; 
     String name = (String) object.get("Name"); 
     System.out.println(name); 

     String age = (String) object.get("Author"); 
     System.out.println(age); 

     //loop array   
     JSONArray msg = (JSONArray) object.get("Company List"); 
     Iterator<String> iterator = msg.iterator(); 
     while (iterator.hasNext()) { 
      System.out.println(iterator.next()); 
     }  
    } 
} 

エラー:

SEVERE: Servlet.service() for servlet [contextServlet] in context with path [/SpringSafeHouseService2.0] 
    threw exception [Request processing failed; nested exception is 
    java.lang.ClassCastException: java.util.ArrayList cannot be cast to org.json.simple.JSONArray] 
    with root cause java.lang.ClassCastException: java.util.ArrayList cannot be cast to org.json.simple.JSONArray 
+0

ただ、サイドノート:あなたは本番にコードを置く前に、あなたの名前をリファクタリングする必要があります。 ;) - 'String age =(String)object.get(" Author ");' ... – Thomas

+1

エラーメッセージの直後に、 'ArrayList'を' JSONArray'にキャストできません。あなたはこのような何かをすることができますか? : 'ArrayList msg = object.get(" Company List ");' – TW80000

+0

あなたは実際にjson文字列をどのように解析していますか?メソッドは実際の構文解析を行いません。これは、最初の 'JSONObject'インスタンスを作成した時点ですでに行われています。 – Thomas

答えて

0

を反復処理する方法です。 ArrayList btw。)、すなわち、"Company List"フィールド。

ContainerFactoryでも配列を別のListインスタンスにすることができるので、キャストが機能しない理由がある可能性があります。それ)。あなたはとにかくListを取得する必要がありますので、

最後に、それはそれにキャストすると安全でなければなりません:

List<?> msg = (List<?>) object.get("Company List"); 
0

JSONArray msg = object.getJSONArray("Company List");の代わりに、ArrayListの研に投げ込まJSONArray msg = (JSONArray) object.get("Company List");

2

をお試しくださいJSONArrayのEAD(JSONArrayまたはArrayListのか、それはだリストの実装となることができますので、することはそれほどのArrayListまたはインタフェースListを使用すると、クラスキャスト例外を持つことができないことを確認使用し、あなたの文字列をデシリアライズする方法によって異なります):

JSONObject parser = new JSONParser(); 
    JSONObject object = (JSONObject) parser.parse("{\n" + 
      " \"Name\": \"crunchify.com\",\n" + 
      " \"Author\": \"App Shah\",\n" + 
      " \"Company List\": [\n" + 
      "  \"Compnay: eBay\",\n" + 
      "  \"Compnay: Paypal\",\n" + 
      "  \"Compnay: Google\"\n" + 
      " ]\n" + 
      "}"); // Here there is a JSONArray for companies property 

    Map<String, Object> obj = new HashMap(); 
    List<String> companies = new ArrayList<>(); 
    companies.add("a"); 
    companies.add("b"); 
    companies.add("c"); 
    obj.put("Name", "toto"); 
    obj.put("Author", "titi"); 
    obj.put("Company List", companies); 
    JSONObject object2 = new JSONObject(obj); // here you have an ArrayList for companies property 

    String name = (String) object.get("Name"); 
    System.out.println(name); 

    String age = (String) object.get("Author"); 
    System.out.println(age); 

    //loop array 
    List msg = (List) object.get("Company List"); 
    Iterator<String> iterator = msg.iterator(); 
    while (iterator.hasNext()) { 
     System.out.println(iterator.next()); 
    } 
0

異なるインタフェースを持つorg.json.simpleを使用しています。ここで

は、JSON-シンプル(バージョンはので、私の情報が古い可能性があります不足しているが使用しているように見えるもの)は通常JSONArrayのインスタンスを作成します(拡張あなたがArrayList

for(String s : object.get("Company List")) 
     System.out.println(s);