Android 解析json数据---阿里巴巴的fastjson方法

此过程使用alibaba的fastjson方法,具体实现步骤如下:

1.在Android  Studio中需要Gradle依赖。

在build.gradle中添加依赖

compile 'com.alibaba:fastjson:1.1.55.android'

2.在Activity中

 String json = null;
//成功获取网页的json数据
try {
    String url = "http://search.kuwo.cn/r.s?all="+searchMessage+"&ft=music&itemset=web_2013&client=kt&pn=0&rn=150&rformat=json&encoding=utf8";
    json = HtmlService.getHtml(url);
} catch (Exception e) {
    e.printStackTrace();
    Log.d(TAG,"------------>"+"获取json失败");
}

至此,可以获取到json


//接下来将获取到的json数据进行解析
//这是获取一条数据
//JSON.parseObject(json, KuWoInfo.class);

//这是获取多条数据
//先格式化一下JSON的格式
json = json.replace("\\&", "&");
json = json.replace(" ", " ");
json = "[" + json + "]";

//使用阿里的fastjson进行解析
List<KuWoInfo> list = JSON.parseArray(json,KuWoInfo.class);
Log.d(TAG,"--------------->"+list.get(0).getAbslist()[0].getSONGNAME());


至此可以获取到指定的List。


已下贴上代码:

Activity:

/**
 * Created by 在旭 on 2018/2/10.
 */

public class UrlActivity extends Fragment{

    private EditText editText;
    private Button button;
    private MyHandler myhandler;
    private final String TAG = "UrlActivity";

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.activity_url,null);
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        //找到控件View
        initView();

        //初始化事件
        initEvents();
    }

    private void initEvents() {
        button.setOnClickListener(new search_button_click());
    }

    private void initView() {
        editText = (EditText) getActivity().findViewById(R.id.url_EditText);
        button = (Button) getActivity().findViewById(R.id.url_search_button);
    }

    class search_button_click implements View.OnClickListener{
        @Override
        public void onClick(View v) {
            HandlerThread handlerthread = new HandlerThread("handler_thread");
            handlerthread.start();
            myhandler = new UrlActivity.MyHandler(handlerthread.getLooper());
            myhandler.post(thread);
        }
    }

    class MyHandler extends Handler {
        public MyHandler(Looper looper) {
            super(looper);
        }

        @Override
        public void handleMessage(Message msg) {

        }
    }

    Runnable thread = new Runnable() {
        @Override
        public void run() {
            /*MediaScannerConnection.scanFile(getActivity(), new String[] { Environment
                    .getExternalStorageDirectory().getAbsolutePath() }, null, null);

            Message message = myhandler.obtainMessage();
            message.arg1= AudioUtils.getAllSongs(getActivity()).size();
            myhandler.sendMessage(message);*/


            String searchMessage = "";
            if(TextUtils.isEmpty(editText.getText())){
                Toast.makeText(getActivity(),"请输入后操作",Toast.LENGTH_SHORT).show();
                Log.d(TAG,"flag------------->"+"null");
                return;
            }
            else{
                searchMessage = String.valueOf(editText.getText());
            }

            Log.d(TAG,"searchMessage------------->"+searchMessage);
            String json = null;
            //成功获取网页的json数据
            try {
                String url = "http://search.kuwo.cn/r.s?all="+searchMessage+"&ft=music&itemset" +
                        "=web_2013&client=kt&pn=0&rn=150&rformat=json&encoding=utf8";
                json = HtmlService.getHtml(url);

            } catch (Exception e) {
                e.printStackTrace();
                Log.d(TAG,"------------>"+"获取json失败");
            }

            //接下来将获取到的json数据进行解析
            //这是获取一条数据
            //JSON.parseObject(json, KuWoInfo.class);

            //这是获取多条数据
            //先格式化一下JSON的格式
            json = json.replace("\\&", "&");
            json = json.replace(" ", " ");
            json = "[" + json + "]";

            //使用阿里的fastjson进行解析
            List<KuWoInfo> list = JSON.parseArray(json,KuWoInfo.class);
            Log.d(TAG,"--------------->"+list.get(0).getAbslist()[0].getSONGNAME());
        }
    };
}

KuWoInfo


package model;

/**
 * Created by 在旭 on 2018/3/4.
 */

public class KuWoInfo {
    private abslist[] abslist;

    public KuWoInfo.abslist[] getAbslist() {
        return abslist;
    }

    public void setAbslist(KuWoInfo.abslist[] abslist) {
        this.abslist = abslist;
    }

    public class abslist {
        private String ALBUM;
        private String ARTIST;
        private String MP3RID;
        private String SONGNAME;

        public String getSONGNAME() {
            return SONGNAME;
        }

        public String getALBUM() {
            return ALBUM;
        }

        public void setALBUM(String ALBUM) {
            this.ALBUM = ALBUM;
        }

        public String getARTIST() {
            return ARTIST;
        }

        public void setARTIST(String ARTIST) {
            this.ARTIST = ARTIST;
        }

        public String getMP3RID() {
            return MP3RID;
        }

        public void setMP3RID(String MP3RID) {
            this.MP3RID = MP3RID;
        }

        public void setSONGNAME(String SONGNAME) {
            this.SONGNAME = SONGNAME;
        }
    }

}


HtmlService

package Service;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

/**
 * Created by 在旭 on 2018/3/4.
 */

public class HtmlService {
    public static String getHtml(String path) throws Exception {
        URL url = new URL(path);
        HttpURLConnection conn = (HttpURLConnection)url.openConnection();
        conn.setRequestMethod("GET");
        conn.setConnectTimeout(5 * 1000);
        InputStream inStream = conn.getInputStream();//通过输入流获取html数据
        byte[] data = readInputStream(inStream);//得到html的二进制数据
        String html = new String(data, "UTF-8");
        return html;
    }
    public static byte[] readInputStream(InputStream inStream) throws Exception{
        ByteArrayOutputStream outStream = new ByteArrayOutputStream();
        byte[] buffer = new byte[1024];
        int len = 0;
        while( (len=inStream.read(buffer)) != -1 ){
            outStream.write(buffer, 0, len);
        }
        inStream.close();
        return outStream.toByteArray();
    }
}

猜你喜欢

转载自blog.csdn.net/qq_35343446/article/details/79438521