JSON解析数组

时间:2018-06-12 11:51:59

标签: java json

我几个小时都在苦苦挣扎,我做错了什么。

我正在尝试使用org.json库解析来自此API的数据。

    JSONParser jsonParser = new JSONParser();
    JSONObject obj = (JSONObject) jsonParser.parse(getAllCustomers());


    JSONArray arr = obj.getJSONArray("data");
    for (int i = 0; i < arr.length(); i++) {
        String name = arr.getJSONObject(i).getString("name");     
    }

我甚至不知道我的代码是否正确,但是我得到一个错误,说.getJSONArray()找不到符号,与.getJSONObject相同。

我在这里做错了什么。

JSON:

"data": [
    {
        "id": 1, 
        "name": "Bitcoin", 
        "symbol": "BTC", 
        "website_slug": "bitcoin"
    }, 
    {
        "id": 2, 
        "name": "Litecoin", 
        "symbol": "LTC", 
        "website_slug": "litecoin"
    }, 
    {
        "id": 3, 
        "name": "Namecoin", 
        "symbol": "NMC", 
        "website_slug": "namecoin"
    }, 
    {
        "id": 4, 
        "name": "Terracoin", 
        "symbol": "TRC", 
        "website_slug": "terracoin"
    }, 
    {
        "id": 5, 
        "name": "Peercoin", 
        "symbol": "PPC", 
        "website_slug": "peercoin"
    }, 
    {
        "id": 6, 
        "name": "Novacoin", 
        "symbol": "NVC", 
        "website_slug": "novacoin"
    }, 
    {
        "id": 8, 
        "name": "Feathercoin", 
        "symbol": "FTC", 
        "website_slug": "feathercoin"
    }, 
    {
        "id": 9, 
        "name": "Mincoin", 
        "symbol": "MNC", 
        "website_slug": "mincoin"
    }, 

}

编辑已更改为&#34;帖子&#34;到&#34;数据&#34;。仍然存在上述方法的问题

2 个答案:

答案 0 :(得分:1)

您需要这样做,

JSONArray arr = obj.getJSONArray("data");

而不是

JSONArray arr = obj.getJSONArray("posts");

因为,JsonObject的值键为'data'而不是'posts'

答案 1 :(得分:1)

检查1: 如果您正在尝试解析给定的API,那么没有名称为&#34; posts&#34;一点都没!!尝试使用&#34;数据&#34;相反: - )

fragment = null;

        fragment = Tab1.newInstance(1,categoryName.get(0));

        fm = getSupportFragmentManager();
        ft = fm.beginTransaction();
        ft.replace(R.id.simpleFrameLayout, fragment);
        ft.addToBackStack("tab1");
        ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
        ft.commit();
        tabListBuffer.add(tabLayout.getTabAt(0)); //Add the first tab to arrayList


// perform setOnTabSelectedListener event on TabLayout
        tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {

            @Override
            public void onTabSelected(TabLayout.Tab tab) {

                tabListBuffer.add(tab);
                int count=0;
                int temp=0;

                for (int i = 0; i < tabListBuffer.size(); i++) {
                    if (tabListBuffer.get(i) == tab) {
                        temp=i+1;


                        count++;


                    }
                    final int str = temp;
                    if (count>=2)
                    tabRepeatPos=str;
                }


// get the current selected tab's position and replace the fragment accordingly
                fragment = Tab1.newInstance(tab.getPosition(), categoryName.get(tab.getPosition()));
                String backStateName = fragment.getClass().getName();
                fm = getSupportFragmentManager();
                boolean fragmentPopped = fm.popBackStackImmediate();

                ft = fm.beginTransaction();

                ft.replace(R.id.simpleFrameLayout, fragment);

                ft.addToBackStack("tab" + tab.getPosition());

                if (fragmentPopped) {
                    fm.popBackStack("tab"+tabRepeatPos, 0);
                    fm.executePendingTransactions();
                }

                ft.commit();
                }

检查2: 你说,即使使用&#34;数据&#34;你仍然有错误。 在这种情况下,请查看getAllCustomers()返回的内容。它是否返回有效的json字符串??

检查3: 如果getAllCustomers()返回有效的JSON,它是否包含&#34;数据&#34;元件?如果是,那是一个数组吗?