【发布时间】:2020-01-16 07:57:06
【问题描述】:
在我的项目中,我有一个这样的 json 文件。
[
{
"Task": {
"refType": "EM TASK ",
"reference": "73-22-49-100-104",
"engType": "A5",
"DMC": "V2500-A0-73-22-4900-03A-251A-C",
"subTasks": {
"SUBTASK0": "73-22-49-110-054-001",
"SUBTASK1": "73-22-49-110-054-002"
}
}
}
]
我想用这个 json 文件创建一个地图。它可以是这样的 {refType,reference,engType,DMC,subTasks} 为此,我编写了这些代码
JSONParser parser = new JSONParser();
int k=0;
try {
JSONObject json=null;
System.out.println("Reading JSON file from Java program");
FileReader fileReader = new FileReader("C:\\Users\\ftk1187\\Desktop\\jsonExample.json");
JSONArray jsonArray = (JSONArray) parser.parse(fileReader);
ArrayList<String> subtasks=new ArrayList<String>();
for(int i=0;i<jsonArray.size();i++)
{
json=(JSONObject) jsonArray.get(i);
JSONObject jsonValue = (JSONObject) json.get("Task");
JSONObject subTasks = (JSONObject) jsonValue.get("subTasks");
String reference = (String) jsonValue.get("reference");
String refType = (String) jsonValue.get("refType");
String engType = (String) jsonValue.get("engType");
String dmc = (String) jsonValue.get("DMC");
System.out.println("reference: " + reference);
System.out.println("refType: " + refType);
System.out.println("DMC: " + dmc);
System.out.println("engType: " + engType);
subtasks.addAll(subTasks.values());
while(k<subtasks.size())
{
System.out.println("SubTasks: "+subtasks.get(k));
k++;
}
ObjectMapper objectMapper=new ObjectMapper();
Tasks map=objectMapper.readValue(fileReader, Tasks.class);
System.out.println(map);
}
class Tasks{
private String engType;
private String refType;
private String reference;
private String dmc;
private String[] subTask;
public String getEngType() {
return engType;
}
public void setEngType(String engType) {
this.engType=engType;
}
public String getRefType() {
return refType;
}
public void setRefType(String RefType) {
this.refType=RefType;
}
public String getReference() {
return reference;
}
public void setReference(String Reference) {
this.reference=Reference;
}
public String getDmc() {
return dmc;
}
public void setDmc(String Dmc) {
this.dmc=Dmc;
}
public String[] getSubTask() {
return subTask;
}
public void setSubTask(String[] SubTask) {
this.subTask=SubTask;
}
@Override
public String toString() {
StringBuilder sb=new StringBuilder();
sb.append("{");
sb.append(refType).append(",");
sb.append(reference).append(",");
sb.append(engType).append(",");
sb.append(dmc).append(",");
for(String subTask1:subTask) {
sb.append(subTask1).append(",");
}
sb.append("}");
return sb.toString();
}
}
但这对我不起作用。它给了我这个错误
com.fasterxml.jackson.databind.exc.MismatchedInputException: 否 由于 [Source: (FileReader); 的输入结束而映射的内容;线:1, 列:0] 在 com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:59) 在 com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:4344) 在 com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4189) 在 com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3218) 在 DocFinder.doGet(DocFinder.java:89) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:634) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:741) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 在 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) 在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) 在 org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:678) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) 在 org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:367) 在 org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) 在 org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:860) 在 org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1598) 在 org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(未知来源) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(未知来源) 在 org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 在 java.lang.Thread.run(Unknown Source)
我不知道我需要做什么。我想使用这些参数来创建 servlet 重定向。
【问题讨论】:
-
能否分享完整的堆栈跟踪和 json 文件数据
-
看起来像您尝试解析 json 对象的文件,而实际上 json 是一个 json 数组。所以尝试使用
Tasks的列表/数组作为对象映射器 -
您可能还需要适应您的儿子。可以通过在数组中只放置不带键的任务内容来简化它。