Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Java处理JSON_Java_Json_Jackson_Jackson Databind - Fatal编程技术网

如何使用Java处理JSON

如何使用Java处理JSON,java,json,jackson,jackson-databind,Java,Json,Jackson,Jackson Databind,我将JSON字符串(inputJson)传递给服务器端的java代码(PPProgramAddView) PPProgramAddView: inputJson: [{"ppl_row":0,"ppl_time":"07:00","ppat_id":"Mw==","ppa_id":"MTI=","ppl_LeadAssist":"

我将JSON字符串(inputJson)传递给服务器端的java代码(PPProgramAddView)

PPProgramAddView:
inputJson: [{"ppl_row":0,"ppl_time":"07:00","ppat_id":"Mw==","ppa_id":"MTI=","ppl_LeadAssist":"Lead"},{"ppl_row":1,"ppl_time":"07:10","ppat_id":"Mg==","ppa_id":"NA==","ppl_LeadAssist":"Assist"}]
当我试图处理它时,我得到以下错误:

com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "ppl_row" (class client.Profile14), not marked as ignorable (5 known properties: "plTime", "plActivity", "plActivityType", "plRow", "plLeadAssist"])
 at [Source: (String)"[{"ppl_row":0,"ppl_time":"07:00","ppat_id":"Mw==","ppa_id":"MTI=","ppl_LeadAssist":"Lead"},{"ppl_row":1,"ppl_time":"07:10","ppat_id":"Mg==","ppa_id":"NA==","ppl_LeadAssist":"Assist"}]"; line: 1, column: 14] (through reference chain: java.lang.Object[][0]->client.Profile14["ppl_row"])
        at com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:61)
我已经搜索过了,但在任何地方都找不到“plTime”、“plActivity”、“plActivityType”、“plRow”、“plLeadAssist”

我的代码是:

//Look through the new program lines and add them.
        try {
            ObjectMapper mapper = new ObjectMapper();
            
            Profile14[] profiles14 = mapper.readValue(inputJson, Profile14[].class);
          
            for (final Profile14 programLine : profiles14) {
              
                String ppl_row = programLine.getplRow();
                
                String ppl_time = null;
                if (programLine.getplTime().length() < 1){
                    ppl_time = "00:01";
                }else{
                    ppl_time = programLine.getplTime();
                }
                
                String ppat_id_encoded = programLine.getplActivityType();
                String ppa_id_encoded = programLine.getplActivity();
                String ppl_LeadAssist = programLine.getplLeadAssist().substring(0, Math.min(programLine.getplLeadAssist().length(), 45));
                
                byte[] valueDecoded3 = Base64.decodeBase64(ppat_id_encoded);//decoding part
                String ppat_id = new String(valueDecoded3);
                
                byte[] valueDecoded4 = Base64.decodeBase64(ppa_id_encoded);//decoding part
                String ppa_id = new String(valueDecoded4);
                
                System.out.println("ppID: " + ppID + " ppat_id: " + ppat_id + " ppa_id: " + ppa_id +
                    " ppl_row : " + ppl_row + " ppl_time: " + ppl_time + " ppl_LeadAssist: " + ppl_LeadAssist);

                MySQLConnection.addPPProgramLine(ppID, ppat_id, ppa_id, ppl_row, ppl_time, ppl_LeadAssist);
            }
        } catch (Exception e) {
            e.printStackTrace();
            response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Error.");
        }
    }
}

class Profile14 {
    private String ppl_row;
    private String ppl_time;
    private String ppat_id;
    private String ppa_id;
    private String ppl_LeadAssist;
    
    public String getplRow() {
        return ppl_row;
    }
    public void setplRow(String ppl_row) {
        this.ppl_row = ppl_row;
    }
    
    public String getplTime() {
        return ppl_time;
    }
    public void setplTime(String ppl_time) {
        this.ppl_time = ppl_time;
    }
    
    public String getplActivityType() {
        return ppat_id;
    }
    public void setplActivityType (String ppat_id) {
        this.ppat_id = ppat_id;
    }
    
    public String getplActivity() {
        return ppa_id;
    }
    public void setplActivity(String ppa_id) {
        this.ppa_id = ppa_id;
    }
    
    public String getplLeadAssist() {
        return ppl_LeadAssist;
    }
    public void setplLeadAssist(String ppl_LeadAssist) {
        this.ppl_LeadAssist = ppl_LeadAssist;
    }
    
    @Override
    public String toString() {
        return "Profile14 [ppl_row=" + ppl_row + ", ppl_time=" + ppl_time + ", ppat_id=" + ppat_id
                + ", ppa_id=" + ppa_id + ", ppl_LeadAssist=" + ppl_LeadAssist + "]";
    }
}
//查看新的程序行并添加它们。
试一试{
ObjectMapper mapper=新的ObjectMapper();
Profile14[]profiles14=mapper.readValue(inputJson,Profile14[].class);
用于(最终概要14程序行:概要14){
字符串ppl_row=programLine.getplRow();
字符串ppl_time=null;
if(programLine.getplTime().length()<1){
ppl_time=“00:01”;
}否则{
ppl_time=programLine.getplTime();
}
字符串ppat_id_encoded=programLine.getplActivityType();
字符串ppa_id_encoded=programLine.getplActivity();
字符串ppl_LeadAssist=programLine.getplLeadAssist().substring(0,Math.min(programLine.getplLeadAssist().length(),45));
字节[]valueDecoded3=Base64.decodeBase64(ppat_id_编码);//解码部分
字符串ppat_id=新字符串(valueDecoded3);
字节[]valueDecoded4=Base64.decodeBase64(ppa_id_编码);//解码部分
字符串ppa_id=新字符串(值解码4);
System.out.println(“ppID:+ppID+”ppat_id:+ppat_id+”ppa_id:+ppa_id+
“ppl_行:“+ppl_行+”ppl_时间:“+ppl_时间+”ppl_引导辅助:“+ppl_引导辅助”);
MySQLConnection.addPPProgramLine(ppID、ppat_id、ppa_id、ppl_行、ppl_时间、ppl_LeadAssist);
}
}捕获(例外e){
e、 printStackTrace();
senderro(HttpServletResponse.SC_BAD_请求,“Error”);
}
}
}
班级简介14{
私有字符串ppl_行;
私有字符串ppl_时间;
私有字符串ppat_id;
私有字符串ppa_id;
私人字符串ppl_LeadAssist;
公共字符串getplRow(){
返回ppl_行;
}
公共无效设置行(字符串ppl_行){
this.ppl_行=ppl_行;
}
公共字符串getplTime(){
返回ppl_时间;
}
公共无效设置时间(字符串ppl_时间){
this.ppl_time=ppl_time;
}
公共字符串getplActivityType(){
返回ppat_id;
}
public void setplActivityType(字符串ppat_id){
this.ppat_id=ppat_id;
}
公共字符串getplActivity(){
返回ppa_id;
}
公共无效设置活动(字符串ppa_id){
this.ppa_id=ppa_id;
}
公共字符串getplLeadAssist(){
返回ppl_LeadAssist;
}
公共无效设置引导辅助(字符串ppl\U引导辅助){
this.ppl_LeadAssist=ppl_LeadAssist;
}
@凌驾
公共字符串toString(){
返回“Profile14[ppl_row=“+ppl_row+”,ppl_time=“+ppl_time+”,ppat_id=“+ppat_id
+“,ppa_id=“+ppa_id+”,ppl_LeadAssist=“+ppl_LeadAssist+”]”;
}
}

您没有遵循JavaBean标准,没有明确的说明,Jackson不知道如何映射您的类

Java惯例是命名属性,如
pplRow
,而JSON使用的是另一种Ruby风格的
ppl\u行
。有三种选择:

  • 切换整个Jackson引擎以使用备用样式。(这不是个好主意,因为它容易引起碰撞
  • 告诉Jackson为特定Java类使用另一种样式(我们将这样做)
  • @JsonProperty
    注释每个属性(虽然有效,但需要付出很多额外的努力)
首先,对属性使用标准Java命名:

class Profile14 {
  private String pplRow;

  public String getPplRow() {
    return this.pplRow;
  }

  public void setPplRow(String s) {
    this.pplRow = s;
  }
}
请注意,方法的命名定义了属性(因为支持字段是私有的,技术上不必存在)。您现有的属性与名称不匹配(
pl
,而不是
ppl
),并且没有正确的大小写

现在将此注释添加到类中:

@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
这告诉Jackson使用
snake\u case
命名所有属性。这应该足以让映射正常工作