我的个人项目遇到了一些问题。 我从网址获取数据字段:http://ddragon.leagueoflegends.com/cdn/13.15.1/data/en_US/champion.json
使用以下代码:
import DataHandlers.ChampionsJson;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.util.concurrent.ExecutionException;
public class ChampionsDataScheduler extends Thread{
@Override
public void run(){
while(true){
try {
var client = HttpClient.newHttpClient();
var request = HttpRequest.newBuilder(
URI.create("http://ddragon.leagueoflegends.com/cdn/13.15.1/data/en_US/champion.json"))
.header("accept", "application/json")
.build();
var responseFuture = client.sendAsync(request, new JsonBodyHandler<>(ChampionsJson.class));
var response = responseFuture.get();
var data = response.body().get().championsData;
System.out.println(data);
Thread.sleep(1000);
} catch (InterruptedException | ExecutionException e) {
throw new RuntimeException(e);
}
}
}
}
使用这个类:
package DataHandlers;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.JsonNode;
import java.util.List;
@JsonIgnoreProperties(ignoreUnknown = true)
public class ChampionsJson {
public final JsonNode championsData;
@JsonIgnoreProperties(ignoreUnknown = true)
public ChampionsJson(@JsonProperty("data") JsonNode championsData) {
this.championsData = championsData;
}
}
我正在尝试将每个冠军(接收到的 json 中的每个值)注入到以下对象并创建它的数组:
package DataHandlers;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.List;
@JsonIgnoreProperties(ignoreUnknown = true)
public class ChampionsData {
public final String id;
public final String name;
public final String blurb;
public final List image;
public final String title;
@JsonIgnoreProperties(ignoreUnknown = true)
public ChampionsData(@JsonProperty("id") String id,
@JsonProperty("name") String name,
@JsonProperty("blurb") String blurb,
@JsonProperty("image") List image,
@JsonProperty("title") String title) {
this.id = id;
this.name = name;
this.title = title;
this.blurb = blurb;
this.image = image;
}
}
但是我没有这样做,因为我将 json 作为 json 字符串获取,并且我还没有找到正确解析它的方法。 知道怎么做吗?也许有更好的方法吗?
如果您想获得更多上下文,我的最终目标是将 ChampionsData 对象数组转换为 morphia 对象数组并将其插入到 mongo。
http://ddragon.leagueoflegends.com/cdn/13.15.1/data/en_US/champion.json
处的数据是具有单个键data
的单个JSON对象。 data
是一个大约有 164 个子字段的对象,每个子字段似乎都是一个冠军的名字。没有数组;您必须迭代 data
字段。
如果目标是将此数据插入 MongoDB,那么我建议将每个冠军制作为单独的文档。子字段携带大量标识信息,例如
name
、key
和 id
,因此让我们保留这些信息并让 MongoDB 客户端驱动程序发明 _id
。
ObjectMapper mapper = new ObjectMapper(); // can reuse, share globally
Map<String,Object> content = mapper.readValue(new File(fileName), Map.class);
String host = "mongodb://your_connection_uri";
MongoClient client = MongoClients.create(host);
MongoDatabase db = client.getDatabase("testX");
MongoCollection<Document> coll = db.getCollection("foo", Document.class);
java.util.Map data = (java.util.Map) content.get("data");
data.forEach(
(key, value)
-> {
Document dd = new Document((Map)value);
coll.insertOne(dd);
});