[英]Parsing JSON in Java without knowing JSON format (like with selectToken)
這是我的問題。 我從互聯網上獲得了一個或多個這樣的隨機json文件。
我試圖用android studio中的JSON解析它(例如,使用gson)。 但是我在gson中找不到這樣的選項,它使我可以在不知道JSON結構(並創建一個類和類似東西)的情況下從JSON文件中選擇令牌。 當我嘗試在VisualBasic.NET中執行此操作時,使用此代碼和NewtonSoft.Json庫確實很容易:
Dim jsonSet As JObject = JObject.Parse(responseFromServer)
balance = jsonSet.SelectToken("$..balance")
但是用Java做到這一點似乎更加困難……有人可以幫助我嗎?
Gson是對象序列化/反序列化庫。 其目的是在已知對象之間進行序列化。
您想使用一個更基本的庫,其中提供了許多實現。 其中一些列出了http://www.json.org/
他們允許您編寫如下代碼
JSONObject obj = new JSONObject("{}");
您可以將json字符串粘貼到http://www.jsonschema2pojo.org/
它將創建jsonString對象。
json的示例:
-----------------------------------com.example.Datum.java-----------------------------------
package com.example;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class Datum {
@SerializedName("address")
@Expose
private String address;
@SerializedName("balance")
@Expose
private Integer balance;
@SerializedName("nonce")
@Expose
private Object nonce;
@SerializedName("code")
@Expose
private String code;
@SerializedName("name")
@Expose
private Object name;
@SerializedName("storage")
@Expose
private Object storage;
@SerializedName("firstSeen")
@Expose
private String firstSeen;
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public Integer getBalance() {
return balance;
}
public void setBalance(Integer balance) {
this.balance = balance;
}
public Object getNonce() {
return nonce;
}
public void setNonce(Object nonce) {
this.nonce = nonce;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public Object getName() {
return name;
}
public void setName(Object name) {
this.name = name;
}
public Object getStorage() {
return storage;
}
public void setStorage(Object storage) {
this.storage = storage;
}
public String getFirstSeen() {
return firstSeen;
}
public void setFirstSeen(String firstSeen) {
this.firstSeen = firstSeen;
}
}
-----------------------------------com.example.Example.java-----------------------------------
package com.example;
import java.util.List;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class Example {
@SerializedName("status")
@Expose
private Integer status;
@SerializedName("data")
@Expose
private List<Datum> data = null;
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public List<Datum> getData() {
return data;
}
public void setData(List<Datum> data) {
this.data = data;
}
}
之后,您將使用jsonString函數獲取對象:
// Deserialize to single object.
public Example deserializeFromJson(String jsonString) {
Gson gson = new Gson();
Example myClass = gson.fromJson(jsonString, Example.class);
return myClass;
}
您可以將所有東西都放在對象中。
希望它可以解決您的問題!
好吧,終於在進行了更多研究之后,我發現了這一點: https : //github.com/json-path/JsonPath
這正是我所需要的,因為它使您可以訪問JSON對象並使用其路徑查找令牌,就像我在.NET中對NewtonSoft.Json所做的一樣。
我認為這真的很有趣,無論JSON文件的結構如何,您都可以通過僅提供格式為“ $ .. path”的路徑來查找值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.