2017-02-18 2 views
0

У меня есть файл в формате JSON, как этоисключением литых класса [JSONArray не может быть приведен к org.json.simple.JSONObject]

[ { 
    "id":"serve-coffee", 
    "tags":[ { 
     "name": "@tag1", "line": 1 
    } 
    ], 
    "description":"Coffee should not be served\n", 
    "name":"Serve coffee", 
    "keyword":"Feature", 
    "line":2, 
    "elements":[ { 
     "id": "serve-coffee;buy-last-coffee", "tags":[ { 
      "name": "@tag2", "line": 6 
     } 
     ], 
     "description":"", 
     "name":"Buy last coffee", 
     "keyword":"Scenario", 
     "line":7, 
     "steps":[ { 
      "name": "there are 1 coffees left in the machine", "keyword": "Given ", "line": 8 
     } 
     , 
     { 
      "name": "I have deposited 1$", "keyword": "And ", "line": 9 
     } 
     ], 
     "type":"scenario" 
    } 
    ], 
    "uri":"src\/test\/resources\/traffic-remove-locations.feature" 
} 

] 

Iam пытается преобразовать вышеуказанный файл JSON в JSONObject .Но я получаю класса литой исключение "java.lang.ClassCastException: org.json.simple.JSONArray cannot be cast to org.json.simple.JSONObject"

код

public static JSONObject convertFileToJSON(String fileName) throws ParseException { 

     // Read from File to String 
     JSONParser parser = new JSONParser(); 
     JSONObject jsonObject = null; 
     try { 
      Object object = parser.parse(new FileReader(fileName));   
      jsonObject = (JSONObject) object; // Getting classCast Exception here. 

     } catch (FileNotFoundException e) { 

     } catch (IOException ioe) { 

     }  
     return jsonObject; 
    } 

but when i changed the linejsonObject = (JSONObject) object;toJSONArray jsonArray = (JSONObject)object исключение исчезает. Но если am cast to JSONArray, то как я могу получить значения, такие как id,tags и description от JSONArray. , пожалуйста, предоставьте предложение парням

ответ

1

Ваш JSON-файл представляет собой массив с одним объектом в нем. Так что, если бы это было структура данных Java, вы эффективно делать это:

int[] arr = {5}; 
int i = (int)arr; 

Это, очевидно, не работает, потому что вы не можете бросить массив к особому объекту. Что вы на самом деле хотите сделать, вытащите первый элемент из массива. Продолжая пример Java, вы хотите сделать

int[] arr = {5}; 
int i = (int)arr[0]; 

С материалом JSON, ваш parser.parse() вызов возвращает JSONArray, не JSONObject. Поэтому вам нужно будет сделать что-то вроде этого:

public static JSONObject convertFileToJSON(String fileName) throws ParseException { 
    JSONParser parser = new JSONParser(); 
    JSONObject jsonObject = null; 
    try { 
     JSONArray array = (JSONArray) parser.parse(new FileReader(fileName));   
     jsonObject = array.getJsonObject(0); 

    } catch (FileNotFoundException e) { 

    } catch (IOException ioe) { 

    }  
    return jsonObject; 
} 
+0

спасибо, что оно работает – Psl

+0

принимаем ответ. –

1

Попробуйте выполнить кастинг в JsonArray, а затем пролите доступ к объектам сона одним из них с помощью индекса из массива JSON.

Object object = parser.parse(new FileReader(fileName));   
JsonArray jsonArr = (JsonArray) object; // Getting c 
jsonObject jsonObj = jsonArr.get(0); //use index to access like a list 
Смежные вопросы