2014-09-17 2 views
1

Как я могу разобрать массив с прямыми значениями, дважды json, закодированный в Java, я получаю данные как строку, и я хочу получить каждое значение из многомерного массива.Как разобрать массивы с прямыми значениями, дважды json закодирован

Я вроде как нуб относительно java, мне удалось вытащить не очень элегантное решение, которое сталкивается с проблемами, когда я разделяю «,», если внутри текста есть »,« я мог бы делать это с помощью регулярного выражения, но быть более элегантное решение, чем это:

content = the data fetched from the api as a string 
content = content.replace("\"[[", "["); 
      content = content.replace("]]\"", "]"); 
      content = content.replaceAll("\\\\",""); 
      for (String FaData : content.split("\\],\\[")) { 
       for (String FaDataData : FaData.split(",")) { 
        FaDataData.toString(); 
       } 
      } 

Вот вам пример того, как содержимое строки на самом деле выглядит, когда забирается:

"[[308576,1410880665,162506,\"Bobcat\",1,\"http:\\\/\\\/hugelolcdn.com\\\/i460\\\/308576.jpg\",\"Well no\",82,3,\"\"],[308592,1410883832,9479,\"undeathkiller\",2,\"http:\\\/\\\/hugelolcdn.com\\\/i\\\/308592.gif\",\"Guess the stupidity level\",89,9,\"\"],[308574,1410879991,32277,\"rady123lol\",2,\"http:\\\/\\\/hugelolcdn.com\\\/i\\\/308574.gif\",\"force of habit\",92,3,\"\"],[308624,1410897686,149704,\"Raptide7\",1,\"http:\\\/\\\/hugelolcdn.com\\\/i460\\\/308624.jpg\",\"*breathing intensifies*\",114,8,\"\"],[308648,1410911037,114669,\"Huller\",1,\"http:\\\/\\\/hugelolcdn.com\\\/i460\\\/308648.jpg\",\"SPOILERS: Stannis kills Dumbledore\",133,2,\"\"],[308628,1410898654,135315,\"Mig_L\",1,\"http:\\\/\\\/hugelolcdn.com\\\/i460\\\/308628.jpg\",\"So badass\",117,2,\"gold\"],[308639,1410902872,62886,\"burningowl\",1,\"http:\\\/\\\/hugelolcdn.com\\\/i460\\\/308639.jpg\",\"Kid's going places yo\",125,4,\"\"],[308520,1410858123,73400,\"koppie888\",1,\"http:\\\/\\\/hugelolcdn.com\\\/i460\\\/308520.jpg\",\"4chan, what a beautifull place\",99,7,\"\"],[308546,1410872801,32277,\"rady123lol\",1,\"http:\\\/\\\/hugelolcdn.com\\\/i460\\\/308546.jpg\",\"(\\u0361\\u00b0 \\u035c\\u0296 \\u0361\\u00b0)\",118,17,\"\"],[308486,1410846601,176339,\"AtLeastISubmit\",1,\"http:\\\/\\\/hugelolcdn.com\\\/i460\\\/308486.jpg\",\"That 70's show called it.\",101,3,\"\"]]" 

ответ

0

Если предположить, что у вас есть текст в строковой переменной называется все, используя JSONSimple package, вы можете использовать следующий код:

try { 
    // create a new JSONParser 
    JSONParser parser=new JSONParser(); 
    // first JSON decoding 
    Object obj = parser.parse(everything); 
    // second JSON decoding 
    obj = parser.parse(obj.toString()); 
    // cast the parsed JSON string to a new JSONArray 
    JSONArray array = (JSONArray)obj; 
    // loop through each line of the initial JSONArray 
    for (int i = 0; i < array.size(); i++){ 
     // write the array values as a single line 
     System.out.println(i + " : " + array.get(i)); 
     // parsing each line as a new JSONArray 
     JSONArray tmp = (JSONArray)parser.parse(array.get(i).toString()); 
     for (int j = 0; j < tmp.size(); j++){ // iterate over the parsed values 
      System.out.println(i+"."+j+" : "+tmp.get(j)); 
     } 
    } 
} catch (ParseException ex) { 
    Logger.getLogger(Test1.class.getName()).log(Level.SEVERE, null, ex); 
} 

Конечно, вы также должны импортировать следующие классы из JSON package:

import org.json.simple.JSONArray; 
import org.json.simple.parser.JSONParser; 
import org.json.simple.parser.ParseException; 
+0

работает отлично. Большое спасибо! –

0

Попробуйте

content = content.trim(); 
content = content.substring(0, content.length()); //gets the length of content string 
content = content.replaceAll("\\/","/"); //Replaces all \/ to/

Он также применим к кронштейнам.

0

Если вы используете JSON, я бы предложил использовать библиотеку JSON, такую ​​как jackson.

ObjectMapper mapper = new ObjectMapper(); 
String[][] 2Darray = mapper.readValue(content, String[][].class); 

Но, если вы используете JSON, было бы неплохо, если бы формат данных был более структурированным. Очевидно, что это зависит от того, имеете ли вы какой-либо контроль над API.

Смежные вопросы