2017-10-16 13 views
0

ここに私の問題があります。私はthis oneまたはthis oneのようなランダムなjsonファイルをインターネットから取得しています。(selectTokenのように)JSON形式を知らなくてもJSONをJavaで解析する

私はアンドロイドスタジオでJSONと解析しようとしています(gsonなど)。しかし、gsonでJSON構造を知らずに(そしてクラスとそのものを作成して)JSONファイルからトークンを選択できるようなオプションは見つけられません。私はVisualBasic.NETでこれを行うことを試みた際には、このコードとNewtonSoft.Jsonライブラリ使用して、本当に簡単だった:

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

をしかし、Javaでこれを行う方法難しいようだ...誰かが私を助けることができますか?

+0

[Gsonを使用してJSONをHashMapに変換するにはどうすればよいですか?](https://stackoverflow.com/questions/2779251/how-can-i-convert-json-to-a-hashmap-using- gson) – logcat

答えて

0

さて、最後にいくつかのより多くの研究を行った後、私はこれを見つけました.NETの.Json

JSONファイルの構造が何であっても、 "$ .. path"という形式のパスのみを指定すると、値を見つけることができるので、本当に面白いと思います。

0

Gsonは、オブジェクトのシリアル化/逆シリアル化ライブラリです。その目的は、既知のオブジェクトとの間でシリアル化することです。

利用可能な実装がいくつかありますが、より基本的なライブラリを使いたいとします。そのうちのいくつかは、彼らはあなたがあなたがそれをjsonStringのオブジェクトを作成しますhttp://www.jsonschema2pojo.org/

にあなたのJSON文字列を貼り付けることができ

JSONObject obj = new JSONObject("{}"); 
+0

はい、問題は、私が求めているオプションを実行するライブラリが見つかりませんでした。 Gsonはほんの一例でした。あなたはNewtonSoft.Jsonのように動作するライブラリを知っていますか? – Xamortex

+0

https://mvnrepository.com/artifact/org.json/json – Deadron

0

ようなコードを書くことができ

http://www.json.org/を記載されています。あなたの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; 
    } 

そして、あなたはあなたのオブジェクト内のすべてのものを得ることができます。

私はそれがあなたの問題を助けることを願っています!それはあなたがJSONオブジェクトにアクセスし、そのパスでトークンを見つけることができますように私はNewtonSoftとまったく同じように、私がまさに必要だ https://github.com/json-path/JsonPath

+0

これで私はまだ同じ問題を抱えていました。複数の非ジェネリックjson APIで動作するコードが1つ必要です。私が持っているJSONファイルごとに1つのクラスを作成することを提案しますが、もっとシンプルなものを求めています:JSONファイルを指定し、トークンがあってもファイルの構造に関係なくトークンの値を取得します配列の中にあります。 .NETを使用しているNewtonSoft.Jsonに貼り付けたコードでは、単純で簡単でした。とにかく助けてくれてありがとう! – Xamortex

関連する問題