android - JSON Android 解析JSONArray

标签 android arrays json parsing

我正在尝试解析 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"
            ]               
        }
    ] 
}

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

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/

相关文章:

java - 在java代码中包含apk签名以在运行时验证它

android - Android 自动对焦后的视频录制问题

android - Firebase 依赖项在运行时导致错误

arrays - C 中 sizeof() 运算符中 "comma"运算符的行为

javascript - 用于 JSON 缩小的 UglifyJs JavaScript API?

android - 自定义 CalendarView 以允许不同的日期显示

javascript - 在 JavaScript 中使用 "holes"遍历数组

php - 使用带有复选框数组的 javascript 函数

android - 我应该使用原生 Android org.json 包来解析 GeoJSON 数据吗?

Android:使用 POST 以 JSON 格式发送字节数组