2017-08-03 164 views
2

我不能够低于字符串格式化:如何逗号和分号分隔字符串分割成一个JSON对象

"Sony,20,30,40;LG,1,4,8" 

在下面JSON格式:

"reported": { 
    "SETS": [ 
     { 
     "prodName": "Sony", 
     "fmtd": "20", 
     "lmtd": "30", 
     "lm": "40" 
     }, 
     { 
     "prodName": "LG", 
     "mtd": "1", 
     "lmtd": "4", 
     "lm": "8" 
     } 
    ] 
    } 

我想下面的代码,但没有得到适当的结果。

String stringFromProc = "SONY,20,30,40;LG,1,4,8"; 
String[] array1 = stringFromProc.split("[\\;]"); 
JSONObject jsonSubObject = null; 
JSONObject jsonFinal = new JSONObject(); 
JSONArray jsonArrayRET = new JSONArray(); 

for(int i=0;i<array1.length;i++){ 
    String []array2 = array1[i].split("[\\,]"); 
    for(int j=0;j<array2.length;j++){ 
     System.out.println(array2[j]); 
     jsonSubObject = new JSONObject(); 

     jsonSubObject.put("prodName", array2[0]); 
     jsonSubObject.put("mtd", array2[1]); 
     jsonSubObject.put("lmtd", array2[2]); 
     jsonSubObject.put("lm", array2[3]); 
     jsonArrayRET.add(jsonSubObject); 
     jsonFinal.put("reported", jsonArrayRET); 
    } 
} 

但是,让这种格式:

{"SETS":[{"lm":"40","lmtd":"30","mtd":"20","prodName":"MNP"},{"lm":"40","lmtd":"30","mtd":"20","kpiName":"MNP"},{"lm":"40","lmtd":"30","mtd":"20","kpiName":"MNP"},{"lm":"40","lmtd":"30","mtd":"20","kpiName":"MNP"},]} 

我知道我分裂逗号分隔的数组,但没能得到如何分割正确的做法后进行循环。有人请提出建议。

回答

4

只需删除内部循环

String stringFromProc = "SONY,20,30,40;LG,1,4,8"; 
String[] array1 = stringFromProc.split(";"); // simply use ; 
// array1[0] = SONY,20,30,40 
// array1[1] = LG,1,4,8 

JSONObject jsonSubObject = null; 
JSONObject jsonFinal = new JSONObject(); 
JSONArray jsonArrayRET = new JSONArray(); 

for(int i=0;i<array1.length;i++){ 
    String []array2 = array1[i].split(","); // simply use , 
    // create jsonobjects 
    // when i=0 mean for sony and next time i = 1 mean for LG 
    jsonSubObject = new JSONObject(); 
    jsonSubObject.put("prodName", array2[0]); 
    jsonSubObject.put("mtd", array2[1]); 
    jsonSubObject.put("lmtd", array2[2]); 
    jsonSubObject.put("lm", array2[3]); 
    // put every object in array 
    jsonArrayRET.add(jsonSubObject); 
    } 
    // finally put array in reported jsonobject 
    jsonFinal.put("reported", jsonArrayRET); 

注:;,是如此没有逃脱\\要求不是特别的正则表达式字符,而不是长期的信息刚刚看了一下character class[]

+1

谢谢!!这也删除了一个额外的循环。我尝试了另一个代码,这也给了我期望的结果,但那是让我使用2 FOR循环。 – rumit

+0

我很高兴我能帮忙,快乐的编码 –

1

移动 jsonFinal.put("reported", jsonArrayRET);

第二循环之外,你overwritting 报道对象。

for(int i=0;i<array1.length;i++){ 
     String []array2 = array1[i].split("[\\,]"); 
     for(int j=0;j<array2.length;j++){ 
      System.out.println(array2[j]); 
      jsonSubObject = new JSONObject(); 
      jsonSubObject.put("prodName", array2[0]); 

      jsonSubObject.put("mtd", array2[1]); 
      jsonSubObject.put("lmtd", array2[2]); 
      jsonSubObject.put("lm", array2[3]); 
      jsonArrayRET.add(jsonSubObject); 
     } 
     jsonFinal.put("reported", jsonArrayRET); 
    } 
相关问题