gpt4 book ai didi

java - 我怎样才能把json放到java中的 map 上

转载 作者:行者123 更新时间:2023-12-02 09:06:41 25 4
gpt4 key购买 nike

在我的项目中,我有一个像这样的 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 文件创建一个 map 。可以是这样的{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: No content to map due to end-of-input at [Source: (FileReader); line: 1, column: 0] at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:59) at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:4344) at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4189) at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3218) at DocFinder.doGet(DocFinder.java:89) at javax.servlet.http.HttpServlet.service(HttpServlet.java:634) at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:678) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:367) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:860) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1598) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Unknown Source)

我不知道我需要做什么。我想使用这些参数来创建 servlet 重定向。

最佳答案

您需要创建适合 JSON 有效负载的 POJO 类。之后,将 JSON 有效负载读取为树 - 作为 JSON Array。迭代它并将每个 Task 节点转换为 Tasks 类:

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.json.JsonMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class JsonApp {

public static void main(String[] args) throws IOException {
File jsonFile = new File("./src/main/resources/test.json");

ObjectMapper mapper = JsonMapper.builder().build();

List<Tasks> tasks = new ArrayList<>();
ArrayNode array = (ArrayNode) mapper.readTree(jsonFile);
array.forEach(item -> tasks.add(mapper.convertValue(item.get("Task"), Tasks.class)));

System.out.println(tasks);
}
}

class Tasks {
private String engType;
private String refType;
private String reference;

@JsonProperty("DMC")
private String dmc;

private Map<String, String> subTasks;

// getters, setters, toString
}

上面的代码打印:

[Tasks{engType='A5', refType='EM TASK ', reference='73-22-49-100-104', dmc='V2500-A0-73-22-4900-03A-251A-C', subTasks={SUBTASK0=73-22-49-110-054-001, SUBTASK1=73-22-49-110-054-002}}]

关于java - 我怎样才能把json放到java中的 map 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59765159/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com