首页 > 解决方案 > JSON对象数据提取

问题描述

不久前我得到了大家的帮助,但是我的话题似乎已经死了-_-,所以我不得不创建一个新帐户,哈哈。我已经完成了建议的所有修复,现在我一直在尝试从 obect 接收准确的数据。我试图从中接收数据的网址是 > https://steemit.com/@ceruleanblue.json

我将发布我的更新 aSyncTask 活动。

public class fetchdata extends AsyncTask<Void,Void,Void> {

String data = "";
String dataParsed = "";
String singleParsed = "";

@Override
protected Void doInBackground(Void... voids) {


    {
        try {
            URL url = new URL("https://steemit.com/@ceruleanblue.json");

            HttpsURLConnection httpsURLConnection = (HttpsURLConnection) url.openConnection();
            InputStream inputStream = httpsURLConnection.getInputStream();
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));

            String lines = "";
            while(lines != null){
                lines = bufferedReader.readLine();
                data = data + lines;
            }

            JSONObject JO = new JSONObject(data);
            String m = "";
            for (int i =0 ;i < JO.length(); i++){
//                    JSONObject JO = (JSONObject) JO.getJSONObject(i);
                singleParsed = "User: " + JO.getString("user") + "\n";
//                                    "Location: " + JO.get("location") + "\n" +
//                                    "ID: " + JO.get("id")+"\n";

                dataParsed = dataParsed + singleParsed;
            }

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
    return null;
}

@Override
protected void onPostExecute(Void aVoid) {
    super.onPostExecute(aVoid);

    followers.dataTV.setText(this.dataParsed);


}

这是我对 JO.getString("user") 的响应。

{"user":{"id":1026971,"name":"ceruleanblue","owner":{"weight_threshold":1,"account_auths":[],"key_auths":[["STM7UPr1LJMw4aAxcuiYAmad6bjjiaeDcfgSynRMrr5L6uvuSJLDJ",1]]},"active":{"weight_threshold":1,"account_auths":[],"key_auths":[["STM7qUaQCghsFZA37fTxVB4BqBBK49z35ni6pha1Kr4q4qLkrNRyH",1]]},"posting":{"weight_threshold":1,"account_auths":[["minnowbooster",1],["steemauto",1]],"key_auths":[["STM7qF27DSYNYjRu5Jayxxxpt1rtEoJLH6c1ekMwNpcDmGfsvko6z",1]]},"memo_key":"STM7wNQdNS9oPbVXscbzn7vfzjB7SwmLGQuFQNzZgatgpqvdKzWQZ","json_metadata":{"profile":{"profile_image":"https://cdn.steemitimages.com/DQmfNj7SLU1aBtV9UkJa5ZKMZPNuzR4ei5UJRA54JxFk99M/Mushrooms%20Trippy%20Art%20Fabric%20Cloth%20Rolled%20Wall%20Poster%20Print.jpg","name":"Cerulean's Chillzone","about":"IT Technician, Programmer, Day Trader, Night Toker.","location":"Ontario, Canada","cover_image":"https://cdn.steemitimages.com/DQmTwT379V7EcQ1ZkqkmJkpWyu4QXw1LzDinv9uoyixksMY/tumblr_static_tumblr_static__640.jpg"}},"proxy":"","last_owner_update":"2018-06-18T19:57:39","last_account_update":"2018-08-01T04:33:06","created":"2018-06-03T20:28:21","mined":false,"recovery_account":"steem","last_account_recovery":"1970-01-01T00:00:00","reset_account":"null","comment_count":0,"lifetime_vote_count":0,"post_count":321,"can_vote":true,"voting_power":9800,"last_vote_time":"2018-08-09T02:47:03","balance":"8.000 STEEM","savings_balance":"0.000 STEEM","sbd_balance":"1.979 SBD","sbd_seconds":"927621285","sbd_seconds_last_update":"2018-08-09T13:23:15","sbd_last_interest_payment":"2018-07-11T10:18:12","savings_sbd_balance":"0.000 SBD","savings_sbd_seconds":"2067163545","savings_sbd_seconds_last_update":"2018-07-23T08:58:48","savings_sbd_last_interest_payment":"2018-07-09T06:32:27","savings_withdraw_requests":0,"reward_sbd_balance":"0.000 SBD","reward_steem_balance":"0.000 STEEM","reward_vesting_balance":"0.000000 VESTS","reward_vesting_steem":"0.000 STEEM","vesting_shares":"167703.513691 VESTS","delegated_vesting_shares":"29412.000000 VESTS","received_vesting_shares":"0.000000 VESTS","vesting_withdraw_rate":"0.000000 VESTS","next_vesting_withdrawal":"1969-12-31T23:59:59","withdrawn":0,"to_withdraw":0,"withdraw_routes":0,"curation_rewards":182,"posting_rewards":110408,"proxied_vsf_votes":[0,0,0,0],"witnesses_voted_for":1,"last_post":"2018-08-07T12:43:42","last_root_post":"2018-08-07T12:25:39","average_bandwidth":"44620566375","lifetime_bandwidth":"1099256000000","last_bandwidth_update":"2018-08-09T13:23:15","average_market_bandwidth":3415484305,"lifetime_market_bandwidth":"237250000000","last_market_bandwidth_update":"2018-08-07T13:21:39","vesting_balance":"0.000 STEEM","reputation":"1564756925664","transfer_history":[],"market_history":[],"post_history":[],"vote_history":[],"other_history":[],"witness_votes":["guiltyparties"],"tags_usage":[],"guest_bloggers":[]},"status":"200"}

我希望能够提取 USER.name("ceruleanblue") 或 USER.memo_key,您认为最好的方法是什么?

标签: androidjsonapi

解决方案


好吧,我第一次在这里回答;开始了。

我最近做了这样的事情。我对在 Java 中使用 JSON 并没有超级经验,但在使用它。这对我有用。希望它也可以帮助其他人。

import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;

// I am sort of 'fast forwarding' here to where your question is.
JSONParser parser = new JSONParser();
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));

Object jsonObj = parser.parse(in.readLine());
JSONObject jsonObject = (JSONObject) jsonObj;
jsonObject.get("What_ever_your_root_element_is");

一旦我进入第一个 JSON 元素,必须根据返回创建一个 JSONArray 或另一个 JSONObject 并再次执行此操作,直到您深入到需要到达的位置。

我相信那里的其他人对此也有一个很好的答案(或更好的答案)。


推荐阅读