2017-03-17 15 views
1

解析JSON

"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" 
     ]    
    } 
] 

問題がある、私はフィールド「場所」に対処する方法がわかりませんか、 「画像」はオプションです。

... elment場所やjsonArray「画像」である

JSONArray stops = jsonObj.getJSONArray("stops"); 

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

      String num = c.getString("num"); 
      String time = c.getString("time"); 
      String title = c.getString("title"); 
      String descripcion = c.getString("desc"); 
      String type = c.getString("type"); 
      String subtype = c.getString("subtype"); 
...... 

} 

しかし、私はここでそれをチェックする方法がわからない:私は最初は「停止」、私はこれをやっているに対処する方法を知っています

答えて

1

最善の方法で 見て、代わりにget

オプトのoptを使用するように解析された値を提供します要求されたキーが存在しない場合

最高のものは、常に値を返すのでtry catchブロックは必要ありません。サーバーからのエラーが発生した場合、アプリケーションがクラッシュしたり、他の値が解析されたりすることはありません。

応答に位置が存在する場合、値で初期化されるか、文字列nullのままになります。 intまたはlongのデフォルト値が0の場合、booleanの場合、デフォルトはfalseです。詳しくはoptを読んでください。

2

使用has()方法

JSONArray stops = jsonObj.getJSONArray("stops"); 

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

     String num = c.getString("num"); 
     String time = c.getString("time"); 
     String title = c.getString("title"); 
     String descripcion = c.getString("desc"); 
     String type = c.getString("type"); 
     String subtype = c.getString("subtype"); 
     if(c.has("location") && !c.isNull("location")){ 
      // parse location 
     } 

     if(c.has("images") && !c.isNull("images")){ 
      // parse images 
     } 

      ..... 
    } 
+0

awesome!最初にチェックしてから初期化してください。代わりにoptStringやoptIntやoptJsonなどを使わないのはなぜですか? –

+0

@MohammedAtif彼らは必要なものを達成するための良い方法ですが、キーの値(キーがある場合)またはデフォルト値のいずれかを取得する場合など、 'optString'を使用するだけです文字列、(キーが存在しない場合)もちろん、キーが存在するかどうかを知るためにここで使用することができます! –

+0

ここでは、私はタスクがキーの存在をチェックすることを考えると思いません。ここで彼はそれを処理したい。 –