2017-03-20 47 views
0
使用路径值创建JSON结构

我有如下包含路径值作为数组:在JAVA

{"A/B1","A/B2","B2/C3","B2/C4"} 

我想透过这个应该看起来像一个JSON结构:

[ 
    { 
    label : A, 
    child : [ 
     {label : 'B1'}, 
     {label : 'B2', 
     child : [ 
     {label : 'C3'},{label : 'C4'} 
     ] 
     } 
    ] 
    } 
] 

我想要做的事象下面这样:

package com.ds.test; 

import java.util.Iterator; 
import java.util.Map; 
import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 
public class Test { 

    private static String pathArray[] = {"A/B1","A/B2","B2/C3","B2/C4"}; 
    private static JSONArray resultJson = null; 

    private static void buildJson(String pathStr) throws JSONException{ 
     String elems[] = pathStr.split("/"); 
     String parent = ""; 
     for(int jj = 0; jj < elems.length; jj++){ 
      checkAndAdd(elems[jj],parent); 
      parent = elems[jj]; 
     } 

    } 

    private static void checkAndAdd(String elem,String parent) throws JSONException{ 
     if(parent.isEmpty()){ 
      JSONObject obj = new JSONObject(); 
      obj.put("label",elem); 
      resultJson.put(obj); 
     } 
     else{ 
      for(int jj = 0; jj < resultJson.length(); jj++){ 
       //to do; 
       //if json element contains element with label = parent then add elem as child 
       //to it. 
      } 
     } 


    } 

    public static void main(String[] args) throws Exception { 

     resultJson = new JSONArray(); 

     for(int ii=0; ii < pathArray.length; ii++){ 
      buildJson(pathArray[ii]); 
     } 
    } 

    } 

但是,我没有得到一个途径,使我可以检查一个的Elemen t已经存在,所以我可以添加子数组。我想递归地做,但没有办法。

有人可以建议我一种方法,我可以继续?我不是要求完整的代码帮助。我只需要一些逻辑来继续?有人可以帮助我吗?

回答

1

我会把它作为图形问题或树问题来处理。您只需要创建一个具有以下顶点的图或树:

A B2 B2 C3 C4。

添加正确的边缘。所以现在你有这样的东西

 A 
    / \ 
    B1  B2 
/ \/\ 
C1 C2 C3 C4 

现在你只需要BFS或水平顺序遍历。