2017-01-06 9 views
2

に次のJSON文字列を変換するにはどうすればJavaオブジェクトに次のJSON文字列を変換したい:はPOJO

{ 
    "user": { 
    "0": { 
     "firstName": "Monica", 
     "lastName": "Belluci" 
    }, 
    "1": { 
     "firstName": "John", 
     "lastName": "Smith" 
    }, 
    "2": { 
     "firstName": "Owen", 
     "lastName": "Hargreaves" 
    } 
    } 
} 

私は、次のクラスを作成しましたJavaオブジェクトにこれを変換するには:

class User { 
    private Map<String, MyObject> user = new HashMap<>(); 
    //Getter and Setter is here 
} 

class MyObject { 
    private String firstName; 
    private String lastName; 
    //Getters and Setters are here 
} 

私はを使用しています。JSONJavaに変換するためのライブラリです。ここで私は変換のためにジャクソンを使用している方法です:

ObjectMapper mapper = new ObjectMapper(); 
User user = mapper.readValue(jsonString, User.class); 

問題は、ユーザーオブジェクトの内部Map以上、この変換で常に空であることです。私は間違って何をしていますか?

ありがとうございます。

+0

あなたはUserクラスに何ジャクソンの注釈を使用していますか? – Hector

+4

私のためにうまく動作します(パブリックフィールドでテスト済み)。間違いは、あなたが示していないものでなければなりません。 – shmosel

+0

これを再現するには、[mcve]が必要になることがあります。 – AxelH

答えて

3

は、私はそれが動作するはずだと思います。私はこのコードを実行し、それは正常に動作します。ここに私の例があります。

import com.fasterxml.jackson.databind.ObjectMapper; 
import java.io.IOException; 

public class TestJackson { 

public static void main(String[] args) throws IOException { 
     ObjectMapper mapper = new ObjectMapper(); 
     String testJson = "{\n" + " \"user\": {\n" + " \"0\": {\n" + "  \"firstName\": \"Monica\",\n" + "  \"lastName\": \"Belluci\"\n" + " },\n" + " \"1\": {\n" + "  \"firstName\": \"John\",\n" + "  \"lastName\": \"Smith\"\n" + " },\n" + " \"2\": {\n" + "  \"firstName\": \"Owen\",\n" + "  \"lastName\": \"Hargreaves\"\n" + " }\n" + " }\n" + "}"; 
     User readValue = mapper.readValue(testJson, User.class); 
     System.out.println("readValue = " + readValue); 
    } 
} 

とUser.class:

import java.util.HashMap; 
import java.util.Map; 

class User { 
    private Map<String, MyObject> user = new HashMap<String, MyObject>(); 

    public Map<String, MyObject> getUser() { 
     return user; 
    } 

    public void setUser(Map<String, MyObject> user) { 
     this.user = user; 
    } 

    @Override 
    public String toString() { 
     return "User{" + 
       "user=" + user + 
       '}'; 
    } 
} 

class MyObject { 
    private String firstName; 
    private String lastName; 

    public String getFirstName() { 
     return firstName; 
    } 

    public void setFirstName(String firstName) { 
     this.firstName = firstName; 
    } 

    public String getLastName() { 
     return lastName; 
    } 

    public void setLastName(String lastName) { 
     this.lastName = lastName; 
    } 

    @Override 
    public String toString() { 
     return "MyObject{" + 
       "firstName='" + firstName + '\'' + 
       ", lastName='" + lastName + '\'' + 
       '}'; 
    } 
} 
+0

ポッターのゲッターとセッターは必須です –

1

gsonライブラリの助けを借りて使用できます。このlink希望はこのことができます

import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.Reader; 
import com.google.gson.Gson; 
import com.google.gson.GsonBuilder; 

public class JsonToJava { 

    public static void main(String[] args) throws IOException { 
     try(Reader reader = new InputStreamReader(JsonToJava.class.getResourceAsStream("/Server2.json"), "UTF-8")){ 
      Gson gson = new GsonBuilder().create(); 
      Person p = gson.fromJson(reader, YourPOJOClass.class); 
      System.out.println(p); 
     } 
    } 
} 

訪問:)

+1

ニースの解決策+1 – Maciej

1

あなたはそれが正常に動作し、コードの下に試すことができます。..

public class User { 

    private Map<String, Map<String, String>> user; 

    public Map<String, Map<String, String>> getUser() { 
     return user; 
    } 

    public void setUser(Map<String, Map<String, String>> user) { 
     this.user = user; 
    } 

} 


public class JsonCast { 

    public static void main(String args[]) { 

     String response = "{\"user\" : {\"0\": {\"firstName\": \"Monica\",\"lastName\": \"Belluci\"},\"1\": { \"firstName\": \"John\",\"lastName\": \"Smith\"}}}"; 

     ObjectMapper mapper = new ObjectMapper(); 
     try { 

      User user = mapper.readValue(response, User.class); 

      System.out.println(user.getUser().get("0")); 

     } catch (IOException e) { 

      e.printStackTrace(); 
     } 
    } 

} 
関連する問題