簡體   English   中英

在Java中解析JSON卻不知道JSON格式(例如selectToken)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM