2016-06-24 4 views
1

だから、私はJavaでJSONオブジェクトに変換しようとしているドットで区切られた文字列を持っています。構造は以下の通りです。ドットで区切られた文字列をJSONオブジェクトに変換する

Person.City.FirstNm.LastNm=xyz, Person.City.Address=abc. Person.City.firstNm.Salary=1000.24, Person.State.FirstNm.LastNm=xyz 

など。結果として得られるJSONは、このようなものでなければなりません。値に小数点があることに注意してください。

{ 
    Person: 
    { 
     City: 
     { 
      firstNm: 
      { 
       LastNm:xyz, 
         Salary:1000.24 
      }, 
      Address: abc 
     }, 
     State: 
     { 
      FirstNm: 
      { 
       LastNm:xyz 
      } 
     } 
    } 
} 

私は、文字列から地図を作成し、その後、私は、オブジェクトが、運としてそれを作るために使用することができますJSON文字列を作るためにそれを使用しようとしました。どんな助けもありがとう。ありがとう

+0

問題のあるコードをアップロードしてください。 – jasonszhao

答えて

3

オブジェクトを格納するためのツリー構造を構築する必要があります。それより、ちょうどtoString()です。あなたがそれを行う方法を以下に示します。

public class TestJson { 
    static abstract class Node { 
    } 

    static class IntermediateNode extends Node { 
     public Map<String, Node> keyValueMap = new LinkedHashMap<>(); 

     @Override 
     public String toString() { 
      StringBuilder sb = new StringBuilder(); 
      sb.append("{"); 
      sb.append(keyValueMap.entrySet().stream().map(entry -> entry.getKey() + " : " + entry.getValue()) 
         .collect(Collectors.joining(", "))); 

      sb.append("}"); 
      return sb.toString(); 
     } 
    } 


    static class LeafNode extends Node { 
     public String value; 

     @Override 
     public String toString() { 
      return value; 
     } 
    } 


    public static void main(String[] args) { 
     String testString = 
       "Person.City.FirstNm.LastNm=xyz, Person.City.Address=abc, Person.City.FirstNm.Salary=1000.24, Person" 
       + ".State.FirstNm.LastNm=xyz"; 

     IntermediateNode root = new IntermediateNode(); 
     for (String param : testString.replaceAll(" ", "").split(",")) { 
      String[] def = param.split("="); 

      String[] result = def[0].split("\\."); 
      IntermediateNode currentNode = root; 
      for (int i = 0; i < result.length - 1; i++) { 
       Node node = currentNode.keyValueMap.get(result[i]); 
       if (node == null) { 
        IntermediateNode child = new IntermediateNode(); 
        currentNode.keyValueMap.put(result[i].trim(), child); 
        currentNode = child; 
       } else { 
        currentNode = (IntermediateNode) node; 
       } 
      } 
      LeafNode leaf = new LeafNode(); 
      leaf.value = def[1]; 
      currentNode.keyValueMap.put(result[result.length - 1], leaf); 
     } 

     System.out.println(root); 
    } 
} 
+0

これで解決しました。 Yaa私はDSを手に入れていませんでした。お手伝いありがとう。 – Rohan

関連する問題