在不知道JSON格式的情况下在Java中解析JSON(与selectToken一样)

时间:2017-10-16 18:47:23

标签: java android json gson

这是我的问题。我从this onethis one获取了一个随机的json文件。

我试图在android studio中使用JSON解析它(例如,使用gson)。但我无法在gson中找到这样的选项,让我从JSON文件中选择一个令牌而不需要知道JSON结构(并创建一个类和那些东西)。当我尝试在VisualBasic.NET中执行此操作时,使用此代码和NewtonSoft.Json库非常简单:

 Dim jsonSet As JObject = JObject.Parse(responseFromServer)
    balance = jsonSet.SelectToken("$..balance")

但是用Java做这件事似乎更难...有人可以帮助我吗?

3 个答案:

答案 0 :(得分:0)

Gson是一个对象序列化/反序列化库。其目的是与已知对象进行序列化。

您想要使用一个更基本的库,其中有多个实现可用。其中一些列出http://www.json.org/

它们允许您编写类似

的代码
JSONObject obj = new JSONObject("{}");

答案 1 :(得分:0)

您可以将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;
    }

你可以获得对象中的所有内容。

我希望它可以帮助你解决问题!

答案 2 :(得分:0)

嗯,最后做了一些研究后我发现了这个: https://github.com/json-path/JsonPath

这正是我所需要的,因为它允许您访问JSON对象并使用其路径查找令牌,就像我在.NET中使用NewtonSoft.Json一样。

我认为它非常有趣,因为无论JSON文件的结构是什么,您都可以通过仅提供格式为&#34; $ .. path&#34;的路径来查找值。