簡體   English   中英

如何將以下 json 字符串轉換為 java object?

[英]How to convert the following json string to java object?

我想將以下 JSON 字符串轉換為 java object:

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”列表。 如何使用 Jackson 完成此操作,或者如果 Jackson 不是最適合此操作,是否有更簡單的方法可以完成此操作?

無需為此使用 GSON; 傑克遜可以做任何簡單的地圖/列表:

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);

查看 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/並下載 Json 的 Java 源代碼解析器對象。

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); 

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/

Underscore-java可以將 json 轉換為 Object。

    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

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

公共無效 parseEmployeeObject() 拋出 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);
  

}

{“時間表”:{“cron”:“30 19 2 MON-FRI”,“時區”:“歐洲/倫敦”,
"tradeQuery": { "filter": [ { "name": "bookType", "operand": "equals", "value": "FO" }, { "name": "bookType", "operand": "等於”,“值”:“FO”}],“參數”:[{“名稱”:“格式”,“值”:“CSV”},{“名稱”:“頁面大小”,“值”:“ 1000" } ] }, "xslt":"" }

}

公共 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 + "]";
    }
    
    

公共 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 + "]";
    }
    
    

公共 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 + "]";
}

公共 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 + "]";
}

公共 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 + "]";
}



    
            

就我而言,我將 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>>>(){});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM