如何将下面的json字符串转换为java对象?

问题描述 投票:0回答:8

我想将以下 JSON 字符串转换为 java 对象:

String jsonString = "{
  "libraryname": "My Library",
  "mymusic": [
    {
      "Artist Name": "Aaron",
      "Song Name": "Beautiful"
    },
    {
      "Artist Name": "Britney",
      "Song Name": "Oops I did It Again"
    },
    {
      "Artist Name": "Britney",
      "Song Name": "Stronger"
    }
  ]
}"

我的目标是轻松访问它,例如:

(e.g. MyJsonObject myobj = new MyJsonObject(jsonString)
myobj.mymusic[0].id would give me the ID, myobj.libraryname gives me "My Library").

我听说过 Jackson,但我不确定如何使用它来适应我拥有的 json 字符串,因为由于涉及“mymusic”列表,它不仅仅是键值对。我怎样才能与杰克逊一起完成这个任务,或者如果杰克逊不是最适合这个任务的人,我可以通过一些更简单的方法来完成这个任务吗?

java json jackson
8个回答
269
投票

无需为此使用 GSON; Jackson 可以做简单的地图/列表:

ObjectMapper mapper = new ObjectMapper();
Map<String,Object> map = mapper.readValue(json, Map.class);

或更方便的 JSON 树:

JsonNode rootNode = mapper.readTree(json);

顺便说一句,您没有理由不能实际创建 Java 类并更方便地执行它(IMO):

public class Library {
  @JsonProperty("libraryname")
  public String name;

  @JsonProperty("mymusic")
  public List<Song> songs;
}
public class Song {
  @JsonProperty("Artist Name") public String artistName;
  @JsonProperty("Song Name") public String songName;
}

Library lib = mapper.readValue(jsonString, Library.class);

55
投票

查看 Google 的 Gson:http://code.google.com/p/google-gson/

来自他们的网站:

Gson gson = new Gson(); // Or use new GsonBuilder().create();
MyType target2 = gson.fromJson(json, MyType.class); // deserializes json into target2

您只需要使用 json 字符串中的所有字段创建一个 MyType 类(当然,重命名)。当您处理数组时,如果您更喜欢手动执行所有解析(也很简单),那么它可能会变得有点复杂,请查看 http://www.json.org/ 并下载 Java 源代码Json 解析器对象。


8
投票
Gson gson = new Gson();
JsonParser parser = new JsonParser();
JsonObject object = (JsonObject) parser.parse(response);// response will be the json String
YourPojo emp = gson.fromJson(object, YourPojo.class); 

5
投票

在我的例子中,我将 JSON 字符串作为列表传递。因此,当您传递列表时,请使用以下解决方案。

ObjectMapper mapper = new ObjectMapper();
String json = "[{\"classifier\":\"M\",\"results\":[{\"opened\":false}]}]";
List<Map<String, Object>> map = mapper
    .readValue(json, new TypeReference<List<Map<String, Object>>>(){});

3
投票

Gson 也很适合:http://code.google.com/p/google-gson/

” Gson 是一个 Java 库,可用于将 Java 对象转换为其 JSON 表示形式。它还可用于将 JSON 字符串转换为等效的 Java 对象。 Gson 可以处理任意 Java 对象,包括您没有源代码的现有对象。 ”

查看 API 示例:https://sites.google.com/site/gson/gson-user-guide#TOC-Overview 更多示例:http://www.mkyong.com/java/how-do-convert-java-object-to-from-json-format-gson-api/


1
投票

Underscore-java我是的开发者)可以将json转换为Object。

import com.github.underscore.U;

    String jsonString = "{\n" +
            "        \"libraryname\":\"My Library\",\n" +
            "                \"mymusic\":[{\"Artist Name\":\"Aaron\",\"Song Name\":\"Beautiful\"},\n" +
            "        {\"Artist Name\":\"Britney\",\"Song Name\":\"Oops I did It Again\"},\n" +
            "        {\"Artist Name\":\"Britney\",\"Song Name\":\"Stronger\"}]}";
    Map<String, Object> jsonObject = U.fromJsonMap(jsonString);
    System.out.println(jsonObject);

    // {libraryname=My Library, mymusic=[{Artist Name=Aaron, Song Name=Beautiful}, {Artist Name=Britney, Song Name=Oops I did It Again}, {Artist Name=Britney, Song Name=Stronger}]}

    System.out.println(U.<String>get(jsonObject, "mymusic[0].Artist Name"));
    // Aaron

0
投票

我有问题中提到的相同类型的 JSON。

"{
  "Service": "User Service",
  "Work": [
    {
      "Name": "abc",
      "Type": "xyz",
      "Mamber": ["lmn", "jkl"]
    }
  ]
}"

我正在使用Jackson(objectMapper)将字符串转换为Java对象。

使用 .class 类型的 readValue 不起作用。

readValue("JSON String", Temp.class)

对我来说最重要的词是:

readValue("JSON String", new TypeReference<Map<String, Object>>(){})

-1
投票
public void parseEmployeeObject() throws NoSuchFieldException, SecurityException, JsonParseException, JsonMappingException, IOException 
  {
   
      Gson gson = new Gson();
      
      ObjectMapper mapper = new ObjectMapper();

        // convert JSON string to Book object
        Object obj = mapper.readValue(Paths.get("src/main/resources/file.json").toFile(), Object.class);
        
        
        endpoint = this.endpointUrl;        

        String jsonInString = new Gson().toJson(obj);
    
      JsonRootPojo organisation = gson.fromJson(jsonInString, JsonRootPojo.class);
      
      
      for(JsonFilter jfil  : organisation.getSchedule().getTradeQuery().getFilter())
      {
         String name = jfil.getName();
         String value = jfil.getValue();
      }
      
      System.out.println(organisation);
      
  }

{
        "schedule": {
        "cron": "30 19 2 MON-FRI",
        "timezone": "Europe/London",        
        "tradeQuery": {
          "filter": [
            {
              "name": "bookType",
              "operand": "equals",
              "value": "FO"
            },
            {
              "name": "bookType",
              "operand": "equals",
              "value": "FO"
            }
          ],
          "parameter": [
            {
              "name": "format",
              "value": "CSV"
            },
            {
              "name": "pagesize",
              "value": "1000"
            }
          ]
        },
        "xslt" :""
        }
      
}


public class JesonSchedulePojo {
    
        public String cron;
        public String timezone;
        public JsonTradeQuery tradeQuery;
        public String xslt;
        
        
        public String getCron() {
            return cron;
        }
        public void setCron(String cron) {
            this.cron = cron;
        }
        public String getTimezone() {
            return timezone;
        }
        public void setTimezone(String timezone) {
            this.timezone = timezone;
        }
    
        public JsonTradeQuery getTradeQuery() {
            return tradeQuery;
        }
        public void setTradeQuery(JsonTradeQuery tradeQuery) {
            this.tradeQuery = tradeQuery;
        }
        public String getXslt() {
            return xslt;
        }
        public void setXslt(String xslt) {
            this.xslt = xslt;
        }
        @Override
        public String toString() {
            return "JesonSchedulePojo [cron=" + cron + ", timezone=" + timezone + ", tradeQuery=" + tradeQuery
                    + ", xslt=" + xslt + "]";
        }
        
        

public class JsonTradeQuery {
    
     public ArrayList<JsonFilter> filter;
        public ArrayList<JsonParameter> parameter;
        public ArrayList<JsonFilter> getFilter() {
            return filter;
        }
        public void setFilter(ArrayList<JsonFilter> filter) {
            this.filter = filter;
        }
        public ArrayList<JsonParameter> getParameter() {
            return parameter;
        }
        public void setParameter(ArrayList<JsonParameter> parameter) {
            this.parameter = parameter;
        }
        @Override
        public String toString() {
            return "JsonTradeQuery [filter=" + filter + ", parameter=" + parameter + "]";
        }
        
        
public class JsonFilter {

    public String name;
    public String operand;
    public String value;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getOperand() {
        return operand;
    }
    public void setOperand(String operand) {
        this.operand = operand;
    }
    public String getValue() {
        return value;
    }
    public void setValue(String value) {
        this.value = value;
    }
    @Override
    public String toString() {
        return "JsonFilter [name=" + name + ", operand=" + operand + ", value=" + value + "]";
    }

public class JsonParameter {
    
    public String name;
    public String value;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getValue() {
        return value;
    }
    public void setValue(String value) {
        this.value = value;
    }
    @Override
    public String toString() {
        return "JsonParameter [name=" + name + ", value=" + value + "]";
    }
    
    
public class JsonRootPojo {
    
    public JesonSchedulePojo schedule;

    public JesonSchedulePojo getSchedule() {
        return schedule;
    }

    

    public void setSchedule(JesonSchedulePojo schedule) {
        this.schedule = schedule;
    }



    @Override
    public String toString() {
        return "JsonRootPojo [schedule=" + schedule + "]";
    }
© www.soinside.com 2019 - 2024. All rights reserved.