有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何在Java中修改JSON对象内的值

我有一个JSON对象,看起来像这样

{
   "result":{
      "issue_date":"20-02-2011",
      "father/husband":"Chopra",
      "name":"Variyar",
      
 "img":"/9j/4AAQSkZJRgABAQAABAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKS",
      "blood_group":"",
      "dob":"11-03-1981",
      "validity":{
         "non-transport":"24-03-2010 to 23-02-2030",
         "transport":""
      },
      "cov_details":[
         {
            "issue_date":"UNIT OFFICE,TRICHY",
            "cov":"NCWG"
         }
      ],
      "dl_number":"TN0290000784",
      "address":"PERIYA COLONY  KO PAVAZHANGUDI  VIRUDHACHALAM TK"
   },
   "request_id":"a2642ae9-2f10-4e9a-9f7e-c3ee1a9a2dbe",
   "status-code":"101"
}

我想使用java编辑“img”中的值,它位于“result”中

obj.remove("img");
obj.put("img","N/A");

但它没有起作用。我的预期输出是Img标签应该是这样的

 "img":"N/A",     

有没有关于如何实现这一目标的建议


共 (5) 个答案

  1. # 1 楼答案

    我建议使用字符串替换“img”对象,如下所示(无论“img”值或长度如何):

    1. 首先以字符串形式获取“img”对象值:

      String imgObject = "\"img\": \"" + json.getJSONObject("result").getString("img") + "\",";
      

    输出将是:

    “img”:“/9j/4AAQSkZJRgABAQAABAAD/2WBDAAYBQYBYBAYGBQYBYCHAKJCHQODWQFXQYGBCHKYGYKHHHHHHHKHKHKHKHKHKHKHKHKHKHKHKHKZJRKHBYYYKSOPGR8TMC0OMCUOKS”

    1. 然后仅提取“img”值:

      imgObject = imgObject.substring(8,imgObject.length()-2);
      imgObject = imgObject.replace("\",","");
      

    输出将是:

    /9j/4AAQSkZJRgABAQAABAAD/2WBDAYEBQYFBAYGBQYHBWICHAKCGKJCHQODWQFXQYGBCUFHYAHSUFFGHSJHBYWICWGIYNKSOPGR8TMC0OMCUKS

    1. 将原始Json转换为字符串:

      String convertedJson = json.toString();
      
    2. 将“img”替换为“不适用”:

      convertedJson = convertedJson.replace(imgObject,"N/A");
      
    3. 转换回JSONObject:

      json = new JSONObject(convertedJson);
      

    就这样

    完整代码:

            JSONObject json = new JSONObject("{\n" +
                "   \"result\":{\n" +
                "      \"issue_date\":\"20-02-2011\",\n" +
                "      \"father/husband\":\"Chopra\",\n" +
                "      \"name\":\"Variyar\",\n" +
                "      \n" +
                " \"img\":\"/9j/4AAQSkZJRgABAQAABAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKS\",\n" +
                "      \"blood_group\":\"\",\n" +
                "      \"dob\":\"11-03-1981\",\n" +
                "      \"validity\":{\n" +
                "         \"non-transport\":\"24-03-2010 to 23-02-2030\",\n" +
                "         \"transport\":\"\"\n" +
                "      },\n" +
                "      \"cov_details\":[\n" +
                "         {\n" +
                "            \"issue_date\":\"UNIT OFFICE,TRICHY\",\n" +
                "            \"cov\":\"NCWG\"\n" +
                "         }\n" +
                "      ],\n" +
                "      \"dl_number\":\"TN0290000784\",\n" +
                "      \"address\":\"PERIYA COLONY  KO PAVAZHANGUDI  VIRUDHACHALAM TK\"\n" +
                "   },\n" +
                "   \"request_id\":\"a2642ae9-2f10-4e9a-9f7e-c3ee1a9a2dbe\",\n" +
                "   \"status-code\":\"101\"\n" +
                "}");
    
        System.out.println("Original img value: "+ json.getJSONObject("result").getString("img"));
    
        //SubString the img object:
        String imgObject = "\"img\": \"" + json.getJSONObject("result").getString("img") + "\",";
        System.out.println("img object key and value: "+imgObject);
    
        imgObject = imgObject.substring(8,imgObject.length()-2);
        imgObject = imgObject.replace("\",","");
    
        System.out.println("img object only value: "+imgObject);
    
        //convert json to string:
        String convertedJson = json.toString();
    
        //replace img
        convertedJson = convertedJson.replace(imgObject,"N/A");
    
    
        //convert back to JSONObject
        json = new JSONObject(convertedJson);
    
        System.out.println("Converted Json with new img value: "+ json.getJSONObject("result").getString("img"));
    
  2. # 2 楼答案

    试试这样的。下面是删除或更新数据的两个选项。使用com。fasterxml。杰克逊

      String tt = "{   \"result\":{      \"issue_date\":\"20-02-2011\",      \"father/husband\":\"Chopra\",      \"name\":\"Variyar\",       \"img\":\"/9j/4AAQSkZJRgABAQAABAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKS\",      \"blood_group\":\"\",      \"dob\":\"11-03-1981\",      \"validity\":{         \"non-transport\":\"24-03-2010 to 23-02-2030\",         \"transport\":\"\"      },      \"cov_details\":[         {            \"issue_date\":\"UNIT OFFICE,TRICHY\",            \"cov\":\"NCWG\"         }      ],      \"dl_number\":\"TN0290000784\",      \"address\":\"PERIYA COLONY  KO PAVAZHANGUDI  VIRUDHACHALAM TK\"   },   \"request_id\":\"a2642ae9-2f10-4e9a-9f7e-c3ee1a9a2dbe\",   \"status-code\":\"101\"}";
             ObjectMapper mapper = new ObjectMapper();
             mapper.enable(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT);
             JsonFactory factory = mapper.getFactory();
             JsonParser createParser = factory.createParser(tt);
             JsonNode actualObj1 = mapper.readTree(createParser);
    // if you just want to update
             ((ObjectNode)((ObjectNode)actualObj1).get("result")).put("img", "n/a"); 
    // if you just want delete
             ((ObjectNode)((ObjectNode)actualObj1).get("result")).remove("img");
             System.out.println(actualObj1.toString());
    
  3. # 3 楼答案

    try {
            com.fasterxml.jackson.databind.ObjectMapper mapper = new com.fasterxml.jackson.databind.ObjectMapper();
            java.util.LinkedHashMap obj = (java.util.LinkedHashMap) mapper.readValue(jsonString, Object.class);
            java.util.LinkedHashMap result = (java.util.LinkedHashMap) obj.get("result");
            result.put("img", "YOUR_VALUE");
            java.io.ByteArrayOutputStream bout = new java.io.ByteArrayOutputStream();
            mapper.writeValue(bout, obj);
            byte[] objectBytes = bout.toByteArray();
            jsonString = new String(objectBytes);
        } catch (java.io.IOException e) {
            e.printStackTrace();
        }
    
  4. # 4 楼答案

    您可以使用任何流行的Json序列化库将Java对象转换为Json,反之亦然:

    在Jackson的例子中,Java中的对象看起来像这样:

    package com.example;
    
    import java.util.HashMap;
    import java.util.Map;
    import com.fasterxml.jackson.annotation.JsonAnyGetter;
    import com.fasterxml.jackson.annotation.JsonAnySetter;
    import com.fasterxml.jackson.annotation.JsonIgnore;
    import com.fasterxml.jackson.annotation.JsonInclude;
    import com.fasterxml.jackson.annotation.JsonProperty;
    import com.fasterxml.jackson.annotation.JsonPropertyOrder;
    
    @JsonInclude(JsonInclude.Include.NON_NULL)
    @JsonPropertyOrder({
    "issue_date",
    "cov"
    })
    public class CovDetail {
    
    @JsonProperty("issue_date")
    private String issueDate;
    @JsonProperty("cov")
    private String cov;
    @JsonIgnore
    private Map<String, Object> additionalProperties = new HashMap<String, Object>();
    
    @JsonProperty("issue_date")
    public String getIssueDate() {
    return issueDate;
    }
    
    @JsonProperty("issue_date")
    public void setIssueDate(String issueDate) {
    this.issueDate = issueDate;
    }
    
    @JsonProperty("cov")
    public String getCov() {
    return cov;
    }
    
    @JsonProperty("cov")
    public void setCov(String cov) {
    this.cov = cov;
    }
    
    @JsonAnyGetter
    public Map<String, Object> getAdditionalProperties() {
    return this.additionalProperties;
    }
    
    @JsonAnySetter
    public void setAdditionalProperty(String name, Object value) {
    this.additionalProperties.put(name, value);
    }
    
    }
    
    package com.example;
    
    import java.util.HashMap;
    import java.util.Map;
    import com.fasterxml.jackson.annotation.JsonAnyGetter;
    import com.fasterxml.jackson.annotation.JsonAnySetter;
    import com.fasterxml.jackson.annotation.JsonIgnore;
    import com.fasterxml.jackson.annotation.JsonInclude;
    import com.fasterxml.jackson.annotation.JsonProperty;
    import com.fasterxml.jackson.annotation.JsonPropertyOrder;
    
    @JsonInclude(JsonInclude.Include.NON_NULL)
    @JsonPropertyOrder({
    "result",
    "request_id",
    "status-code"
    })
    public class Result {
    
    @JsonProperty("result")
    private Result_ result;
    @JsonProperty("request_id")
    private String requestId;
    @JsonProperty("status-code")
    private String statusCode;
    @JsonIgnore
    private Map<String, Object> additionalProperties = new HashMap<String, Object>();
    
    @JsonProperty("result")
    public Result_ getResult() {
    return result;
    }
    
    @JsonProperty("result")
    public void setResult(Result_ result) {
    this.result = result;
    }
    
    @JsonProperty("request_id")
    public String getRequestId() {
    return requestId;
    }
    
    @JsonProperty("request_id")
    public void setRequestId(String requestId) {
    this.requestId = requestId;
    }
    
    @JsonProperty("status-code")
    public String getStatusCode() {
    return statusCode;
    }
    
    @JsonProperty("status-code")
    public void setStatusCode(String statusCode) {
    this.statusCode = statusCode;
    }
    
    @JsonAnyGetter
    public Map<String, Object> getAdditionalProperties() {
    return this.additionalProperties;
    }
    
    @JsonAnySetter
    public void setAdditionalProperty(String name, Object value) {
    this.additionalProperties.put(name, value);
    }
    
    }
    
    package com.example;
    
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import com.fasterxml.jackson.annotation.JsonAnyGetter;
    import com.fasterxml.jackson.annotation.JsonAnySetter;
    import com.fasterxml.jackson.annotation.JsonIgnore;
    import com.fasterxml.jackson.annotation.JsonInclude;
    import com.fasterxml.jackson.annotation.JsonProperty;
    import com.fasterxml.jackson.annotation.JsonPropertyOrder;
    
    @JsonInclude(JsonInclude.Include.NON_NULL)
    @JsonPropertyOrder({
    "issue_date",
    "father/husband",
    "name",
    "img",
    "blood_group",
    "dob",
    "validity",
    "cov_details",
    "dl_number",
    "address"
    })
    public class Result_ {
    
    @JsonProperty("issue_date")
    private String issueDate;
    @JsonProperty("father/husband")
    private String fatherHusband;
    @JsonProperty("name")
    private String name;
    @JsonProperty("img")
    private String img;
    @JsonProperty("blood_group")
    private String bloodGroup;
    @JsonProperty("dob")
    private String dob;
    @JsonProperty("validity")
    private Validity validity;
    @JsonProperty("cov_details")
    private List<CovDetail> covDetails = null;
    @JsonProperty("dl_number")
    private String dlNumber;
    @JsonProperty("address")
    private String address;
    @JsonIgnore
    private Map<String, Object> additionalProperties = new HashMap<String, Object>();
    
    @JsonProperty("issue_date")
    public String getIssueDate() {
    return issueDate;
    }
    
    @JsonProperty("issue_date")
    public void setIssueDate(String issueDate) {
    this.issueDate = issueDate;
    }
    
    @JsonProperty("father/husband")
    public String getFatherHusband() {
    return fatherHusband;
    }
    
    @JsonProperty("father/husband")
    public void setFatherHusband(String fatherHusband) {
    this.fatherHusband = fatherHusband;
    }
    
    @JsonProperty("name")
    public String getName() {
    return name;
    }
    
    @JsonProperty("name")
    public void setName(String name) {
    this.name = name;
    }
    
    @JsonProperty("img")
    public String getImg() {
    return img;
    }
    
    @JsonProperty("img")
    public void setImg(String img) {
    this.img = img;
    }
    
    @JsonProperty("blood_group")
    public String getBloodGroup() {
    return bloodGroup;
    }
    
    @JsonProperty("blood_group")
    public void setBloodGroup(String bloodGroup) {
    this.bloodGroup = bloodGroup;
    }
    
    @JsonProperty("dob")
    public String getDob() {
    return dob;
    }
    
    @JsonProperty("dob")
    public void setDob(String dob) {
    this.dob = dob;
    }
    
    @JsonProperty("validity")
    public Validity getValidity() {
    return validity;
    }
    
    @JsonProperty("validity")
    public void setValidity(Validity validity) {
    this.validity = validity;
    }
    
    @JsonProperty("cov_details")
    public List<CovDetail> getCovDetails() {
    return covDetails;
    }
    
    @JsonProperty("cov_details")
    public void setCovDetails(List<CovDetail> covDetails) {
    this.covDetails = covDetails;
    }
    
    @JsonProperty("dl_number")
    public String getDlNumber() {
    return dlNumber;
    }
    
    @JsonProperty("dl_number")
    public void setDlNumber(String dlNumber) {
    this.dlNumber = dlNumber;
    }
    
    @JsonProperty("address")
    public String getAddress() {
    return address;
    }
    
    @JsonProperty("address")
    public void setAddress(String address) {
    this.address = address;
    }
    
    @JsonAnyGetter
    public Map<String, Object> getAdditionalProperties() {
    return this.additionalProperties;
    }
    
    @JsonAnySetter
    public void setAdditionalProperty(String name, Object value) {
    this.additionalProperties.put(name, value);
    }
    
    }
    
    package com.example;
    
    import java.util.HashMap;
    import java.util.Map;
    import com.fasterxml.jackson.annotation.JsonAnyGetter;
    import com.fasterxml.jackson.annotation.JsonAnySetter;
    import com.fasterxml.jackson.annotation.JsonIgnore;
    import com.fasterxml.jackson.annotation.JsonInclude;
    import com.fasterxml.jackson.annotation.JsonProperty;
    import com.fasterxml.jackson.annotation.JsonPropertyOrder;
    
    @JsonInclude(JsonInclude.Include.NON_NULL)
    @JsonPropertyOrder({
    "non-transport",
    "transport"
    })
    public class Validity {
    
    @JsonProperty("non-transport")
    private String nonTransport;
    @JsonProperty("transport")
    private String transport;
    @JsonIgnore
    private Map<String, Object> additionalProperties = new HashMap<String, Object>();
    
    @JsonProperty("non-transport")
    public String getNonTransport() {
    return nonTransport;
    }
    
    @JsonProperty("non-transport")
    public void setNonTransport(String nonTransport) {
    this.nonTransport = nonTransport;
    }
    
    @JsonProperty("transport")
    public String getTransport() {
    return transport;
    }
    
    @JsonProperty("transport")
    public void setTransport(String transport) {
    this.transport = transport;
    }
    
    @JsonAnyGetter
    public Map<String, Object> getAdditionalProperties() {
    return this.additionalProperties;
    }
    
    @JsonAnySetter
    public void setAdditionalProperty(String name, Object value) {
    this.additionalProperties.put(name, value);
    }
    
    }
    

    然后,可以通过运行以下代码将Json序列化为Java对象:

    final ObjectMapper objectMapper = new ObjectMapper();
    final Result result = objectMapper.readValue(json, Result.class);
    

    其中json变量引用Json数据。拥有Java对象后,您可以简单地使用getter和setter来根据需要调整对象

    result.setRequestId("Test");
    

    {cd2}要编辑属性,请执行以下操作:

    result.getResult().setImg("N/A");
    

    如果您希望将Java对象转换回Json,可以执行以下操作:

    final ObjectMapper mapper = new ObjectMapper();
    final String jsonString = mapper.writeValueAsString(result);
    

    Java类的源代码:http://www.jsonschema2pojo.org/

  5. # 5 楼答案

    使用简单组织的解决方案。json库(*不使用POJO类)

    import org.json.JSONObject;
    
    public class Test {
    
        public static void main(String[] args) {
            String jsonArray = "{\n" +
                    "   \"result\":{\n" +
                    "      \"issue_date\":\"20-02-2011\",\n" +
                    "      \"father/husband\":\"Chopra\",\n" +
                    "      \"name\":\"Variyar\",\n" +
                    "      \n" +
                    " \"img\":\"/9j/4AAQSkZJRgABAQAABAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKS\",\n" +
                    "      \"blood_group\":\"\",\n" +
                    "      \"dob\":\"11-03-1981\",\n" +
                    "      \"validity\":{\n" +
                    "         \"non-transport\":\"24-03-2010 to 23-02-2030\",\n" +
                    "         \"transport\":\"\"\n" +
                    "      },\n" +
                    "      \"cov_details\":[\n" +
                    "         {\n" +
                    "            \"issue_date\":\"UNIT OFFICE,TRICHY\",\n" +
                    "            \"cov\":\"NCWG\"\n" +
                    "         }\n" +
                    "      ],\n" +
                    "      \"dl_number\":\"TN0290000784\",\n" +
                    "      \"address\":\"PERIYA COLONY  KO PAVAZHANGUDI  VIRUDHACHALAM TK\"\n" +
                    "   },\n" +
                    "   \"request_id\":\"a2642ae9-2f10-4e9a-9f7e-c3ee1a9a2dbe\",\n" +
                    "   \"status-code\":\"101\"\n" +
                    "}";
            JSONObject jObject = new JSONObject(jsonArray);
            jObject.getJSONObject("result").put("img", "N/A");
            System.out.println(jObject);
        }
    
    }
    

    输出:

     {
       "result":{
          "cov_details":[
             {
                "issue_date":"UNIT OFFICE,TRICHY",
                "cov":"NCWG"
             }
          ],
          "img":"N/A",
          "dl_number":"TN0290000784",
          "address":"PERIYA COLONY  KO PAVAZHANGUDI  VIRUDHACHALAM TK",
          "issue_date":"20-02-2011",
          "dob":"11-03-1981",
          "name":"Variyar",
          "blood_group":"",
          "validity":{
             "transport":"",
             "non-transport":"24-03-2010 to 23-02-2030"
          },
          "father/husband":"Chopra"
       },
       "status-code":"101",
       "request_id":"a2642ae9-2f10-4e9a-9f7e-c3ee1a9a2dbe"
    }