3

Javaでのjson解析に苦労しています。
javaで標準化されていないランダムなjsonファイルの表現を生成する可能性はありますか? gson を使用しようとしましたが、それが可能かどうか、またどのように可能かはよくわかりませんでした。

したがって、jsonFile は次のようになります。

{ 
 "id":16875,
 "position":[1,2,5,7],
 "metadata":{
     "color":"blue",
     "id": "84779jh",
     "more":{ "some":"randomdata","absolutly":"noStructure"}
}

任意のキーと値のペアが可能であり、json ファイルは必要なだけネストすることができます。別のjsonファイルとマージできるようにするには、Javaオブジェクトのようなものを取得する必要があります。メタデータ部分だけが必要です。残りは無視できます。

では、どうすればそれを機能させることができるか、誰かアイデアはありますか? 助けていただければ幸いです:)

上記のjsonがマージされました(これは親ノードなので、彼のIDと位置を保持し、メタデータをマージするだけです)

  { 
   "id":16zut,
   "position":[1,2,5,7],
   "metadata":{
     "color":"green",
     "id": "84ergfujh",
     "more":{ 
        "some":"randomdata",
        "even":"more",
        "absolutly":"noStructure"
     },
     "tags":[1,2,3,4,6,8,f7,h,j,f]
   }

だろう:

  { 
   "id":16zut,
   "position":[1,2,5,7],
    "metadata":{
    "color":["blue", "green"],
    "id": ["84779jh","84ergfujh]",
    "more":{ "some":"randomdata","absolutly":"noStructure","even":"more"}
    "tags":[1,2,3,4,6,8,f7,h,j,f]
  }

よろしくお願いします。良い一日を。

4

2 に答える 2

5

投稿したjsonを見た後、同じIDでメタデータIDが異なる2つのjsonをマージしようとしていると思います。jsonはキー値で機能するため。この値のように、同じキーに対して 2 つの値を持つことはできません

"color":"blue", "green",
"id": "84779jh","84ergfujh"

色を配列として使用しない限り。ur json を見た後、メタデータ ID に基づいてマップを作成し、それらのメタデータ マップを単一のメタデータ マップに追加できます。

        import java.io.File;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.HashSet;
    import java.util.Map;
    import org.codehaus.jackson.map.ObjectMapper;
    import org.codehaus.jackson.type.TypeReference;
    import com.google.common.collect.ImmutableMap;
    public class JsonFileMapExample {
        public static void main(String[] args) {
            try {
                ObjectMapper mapper = new ObjectMapper();
                // read JSON from a file
                Map<String, Object> map_json1 = mapper.readValue(new File(
                        "F:/Work/DB/work/workspace/restclient/src/json1.json"),
                        new TypeReference<Map<String, Object>>() {
                        });
                Map<String, Object> map_json2 = mapper.readValue(new File("F:/Work/DB/work/workspace/restclient/src/json2.json"),new TypeReference<Map<String, Object>>() { });
                System.out.println(map_json1);
                System.out.println(map_json2);
                Map<String, Object> map2 = (Map<String, Object>) map_json1.get("metadata");         
                Map<String, Object> map_json3 = new HashMap<String, Object>();          
                map_json3 = mergeMyTwoMaps((Map<String, Object>) map_json1.get("metadata"),(Map<String, Object>) map_json2.get("metadata"));            
                System.out.println(map_json3);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        static Map<String, Object> mergeMyTwoMaps(Map<String, Object> map1, Map<String, Object> map2) {
              return ImmutableMap.<String, Object>builder()
                  .putAll(map1)
                  .putAll(map2)
                  .build();
            }

        }

出力:

json1=  {id=16875, position=[1, 2, 5, 7], metadata={id=84779jh, color=blue, more={some=randomdata, absolutly=noStructure}}} 
json2={id=16875, position=[1, 2, 5, 7], metadata={id=84779jhdf, color=green, more={some=dsfasdf, absolutly=afdsadsf}}}
json3_aftermerged={id=16875, position=[1, 2, 5, 7], metadata={id=84779jh, color=blue, more={some=randomdata, absolutly=noStructure}},{id=16875, position=[1, 2, 5, 7], metadata={id=84779jhdf, color=green, more={some=dsfasdf, absolutly=afdsadsf}}}

これを使用するには、 http://code.google.com/p/guava-libraries/の jar ファイルが必要です。

于 2014-03-17T20:51:37.837 に答える