我正在尝试解析JSON:

{
    "shopId": 45123,
    "name":"London",
    "desc":"# The city\n## Intro\n**London** is the capital and most populous city of England and the United Kingdom, as well as the most populous municipality in the European Union. Standing on the _River Thames_ in the south east of the island of Great Britain \n## History \n London has been a major settlement for two millennia. It was founded by the Romans, who named it [Londinium](https://en.wikipedia.org/wiki/Londinium). London's ancient core, the City of London, largely retains its 1.12-square-mile (2.9 km2) medieval boundaries.",
    "priceRating": 4.2,
    "qualityRating":5.0,
    "thumbnail":"https://s-media-cache-ak0.pinimg.com/736x/90/63/4e/90634e974743ed9409f527e3b2f24852.jpg",
    "stops":
    [
        {
            "num": 1,
            "time": "2016-04-27T06:15:00.000Z",
            "title":"Flight to London",
            "desc":"Barcelona BCN-London-Gatwick LGW",
            "type":"0",
            "subtype":0
        },
        {
            "num": 2,
            "time": "2016-04-27T10:35:00.000Z",
            "title":"Gatwick express",
            "desc":"From Airport to London",
            "type":"0",
            "subtype":1
        },
        {
            "num": 3,
            "time": "2016-04-27T12:15:00.000Z",
            "title":"Pub the black horse",
            "desc":"From Airport to London",
            "type":1,
            "subtype":1,
            "location": "51.476334, -0.062700",
            "images": [                 "https://fitzrovianews.files.wordpress.com/2011/01/black_horse_rathbone_pl.jpg"
            ]
        },
        {
            "num": 4,
            "time": "2016-04-27T12:16:47.000Z",
            "title":"The Tower Bridge",
            "desc":"# The Tower Bridge Facts\n## Architecture\n**Tower Bridge** is a combined bascule and suspension bridge in London built in _1886–1894_. The bridge crosses the River Thames close to the Tower of London and has become an iconic symbol of London. Tower Bridge is one of five London bridges now owned and maintained by the Bridge House Estates, a charitable trust overseen by the City of London Corporation. \n>It is the only one of the Trust's bridges not to connect the City of London directly to the Southwark bank, as its northern landfall is in Tower Hamlets.\n## The bridge Exhibition\nThis must-see London attraction invites you to step inside the most famous bridge in the world to explore its iconic structure, spectacular views and glass floor, modern exhibitions and magnificent Victorian Engine Rooms! ",
            "type":1,
            "subtype":6,
            "location": "51.507792, -0.087786",
            "images": [
    "https://i.ytimg.com/vi/nby0Mr2LfBQ/hqdefault.jpg",
    "http://raindropsofsapphire.com/wp-content/uploads/2011/10/london-bridge.jpg",
    "http://www.londonforfree.net/gizmo/wp-content/uploads/2015/02/southwark-bridge.jpg"
            ]
        },
        {
            "num": 5,
            "time": "2016-04-27T12:18:10.000Z",
            "title":"St. Paul Cathedral",
            "desc":"# HISTORY \nSt **Paul's Cathedral**, London, is an _Anglican cathedral_, the seat of the _Bishop of London_ and the mother church of the Diocese of London.  \n * It sits on Ludgate Hill at the highest point of the City of London and is a Grade 1 listed building. \n * Its dedication to Paul the Apostle dates back to the original church on this site, founded in AD 604.",
            "type":1,
            "subtype":6,
            "location": "51.513825, -0.098351",
            "images": [
    "https://d1wgio6yfhqlw1.cloudfront.net/sysimages/product/resized6/Interior_St_Pauls_Cathedral_132_12992.jpg",
    "https://d1kioxk2jrdjp.cloudfront.net/resized/486x324/48-st_pauls_ctahedral_millenirm_bridge.jpg",
    "http://i4.mirror.co.uk/incoming/article8299330.ece/ALTERNATES/s615b/LOND-2016-052-HMQ-St-Pauls-Thanks-Giving-704JPG.jpg"
            ]
        }
    ]
}


当我尝试使用下一个代码解析“ images”元素时,问题就来了:

for (int i = 0; i < stops.length(); i++) {
            JSONObject c = stops.getJSONObject(i);
.....


if(c.has("images") && !c.isNull("images")){
                JSONArray imagenes = jsonObj.getJSONArray("images");
                for (int j = 0; j < imagenes.length(); j++) {
                     String valueString= imagenes.getString(i);
                    Log.d("myTag", "Viatge Parser  con valuestring" + valueString);
                        URL url2 = new URL(valueString);
                        HttpURLConnection connection = (HttpURLConnection) url2.openConnection();
                        connection.setDoInput(true);
                        connection.connect();
                        InputStream input = connection.getInputStream();
                         Bitmap miBitmap = BitmapFactory.decodeStream(input);
                        s.addImage(miBitmap);
                    }


                }


我已经在检查"images"是否存在,但是一直出现此错误:

03-22 00:23:51.391 23180-23797/com.example.usuari.myapplication3 I/System.out: (HTTPLog)-Static: isSBSettingEnabled false
03-22 00:23:51.391 23180-23797/com.example.usuari.myapplication3 I/System.out: (HTTPLog)-Static: isSBSettingEnabled false
03-22 00:23:51.801 23180-23797/com.example.usuari.myapplication3 W/System.err: org.json.JSONException: No value for images
03-22 00:23:51.801 23180-23797/com.example.usuari.myapplication3 W/System.err:     at org.json.JSONObject.get(JSONObject.java:389)
03-22 00:23:51.801 23180-23797/com.example.usuari.myapplication3 W/System.err:     at org.json.JSONObject.getJSONArray(JSONObject.java:584)
03-22 00:23:51.801 23180-23797/com.example.usuari.myapplication3 W/System.err:     at com.example.usuari.myapplication3.ViatgeParser.parseFromJSON(ViatgeParser.java:97)
03-22 00:23:51.801 23180-23797/com.example.usuari.myapplication3 W/System.err:     at com.example.usuari.myapplication3.DownloadAsyncTask.doInBackground(DownloadAsyncTask.java:38)
03-22 00:23:51.801 23180-23797/com.example.usuari.myapplication3 W/System.err:     at com.example.usuari.myapplication3.DownloadAsyncTask.doInBackground(DownloadAsyncTask.java:17)
03-22 00:23:51.801 23180-23797/com.example.usuari.myapplication3 W/System.err:     at android.os.AsyncTask$2.call(AsyncTask.java:295)
03-22 00:23:51.801 23180-23797/com.example.usuari.myapplication3 W/System.err:     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
03-22 00:23:51.801 23180-23797/com.example.usuari.myapplication3 W/System.err:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
03-22 00:23:51.801 23180-23797/com.example.usuari.myapplication3 W/System.err:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
03-22 00:23:51.801 23180-23797/com.example.usuari.myapplication3 W/System.err:     at java.lang.Thread.run(Thread.java:818)


如果我已经在if语句中进行了适当的检查,我不明白如何得到此错误!

最佳答案

更改此JSONArray imagenes = jsonObj.getJSONArray("images");
对此JSONArray imagenes = c.getJSONArray("images");

关于android - JSON Android解析JSONArray,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42940131/

10-14 09:41