[英]How to Parse JSONObject and JSONArray at one time
我正在使用一個使用JSON響應的應用程序,該應用程序同時具有JSONObject和JSONArray。 這兩個信息都需要在地圖上放置標記。 但是我在解析這兩個方面都遇到了問題。
當我打電話給我的URl時,這是我的回復
{
-source: {
LS: " ABCDEF",
name: "XYXA",
point: "77.583859,12.928751"
},
-stores: [
-{
ph: null,
distance: "0.3",
LS: " abcd",
id: 1209,
name: "xyz",
point: "77.583835,12.926359"
},
-{
ph: null,
distance: "0.3",
LS: " abcd",
id: 1209,
name: "xyz",
point: "77.583835,12.926359"
}
]
}
這就是我嘗試處理JSON響應的方式
public class JSONResponseHandler implements ResponseHandler<List<LatlongRec>> {
@Override
public List<LatlongRec> handleResponse(HttpResponse response)
throws ClientProtocolException, IOException {
List<LatlongRec> result = new ArrayList<LatlongRec>();
String JSONResponse = new BasicResponseHandler()
.handleResponse(response);
try {
JSONObject object = (JSONObject)new JSONTokener(JSONResponse)
.nextValue();
JSONArray stores = object.getJSONArray("stores");
for (int i = 0; i < stores.length(); i++) {
JSONObject tmp = (JSONObject) stores.get(i);
result.add(new LatlongRec(tmp.getString("point"), tmp
.getString("name"), tmp.getString("LS"), tmp
.getString("ph")));
Log.v("points", "" + tmp.getString("point"));
}
} catch (JSONException e) {
e.printStackTrace();
}
return result;
}
}
在這個LatlongRec是一個我創建構造函數和getter的類。
這是我的主要活動
public class SecondActivity extends Activity {
private static final double CAMERA_LNG = 77.583859;
private static final double CAMERA_LAT = 12.928751;
// The Map Object
private GoogleMap mMap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
String city = getIntent().getStringExtra("city");
String area1 = getIntent().getStringExtra("area");
String area = area1.trim();
String URL = "http://xyzxyz.search.json?query="
+ area + "&city=" + city + "&app_id=test";
new HttpGetTask().execute(URL);
}
private class HttpGetTask extends AsyncTask<String, Void, List<LatlongRec>> {
AndroidHttpClient mClient = AndroidHttpClient.newInstance("");
@Override
protected List<LatlongRec> doInBackground(String... params) {
HttpGet request = new HttpGet(params[0]);
JSONResponseHandler responseHandler = new JSONResponseHandler();
try {
return mClient.execute(request, responseHandler);
} catch (ClientProtocolException e) {
} catch (IOException e) {
}
return null;
}
@SuppressLint("NewApi")
protected void onPostExecute(List<LatlongRec> result) {
// Get Map Object
mMap = ((MapFragment) getFragmentManager().findFragmentById(
R.id.map)).getMap();
if (null != mMap) {
// Add a marker for every earthquake
for (final LatlongRec rec : result) {
Log.v("pointM", "" + rec.getPoint());
Log.v("NAMES", "" + rec.getName());
String point = rec.getPoint();
String[] latlng = point.split(",");
String lat = latlng[0];
String lng = latlng[1];
Double lat1 = Double.parseDouble(lat);
Double lng1 = Double.parseDouble(lng);
Log.v("LATLNGM", "lat" + lng + "& lng " + lat);
// Add a new marker for each point
mMap.addMarker(new MarkerOptions()
.position(new LatLng(lng1, lat1))
.title(rec.getName())
.snippet(rec.getLS() + rec.getPh())
.icon(BitmapDescriptorFactory
.fromResource(R.drawable.main_marker)));
// Setting a custom info window adapter for the google map
CameraPosition cp = new CameraPosition(new LatLng(CAMERA_LAT,
CAMERA_LNG), 15, 40, 90);
mMap.animateCamera(CameraUpdateFactory.newCameraPosition(cp));
}
if (null != mClient)
mClient.close();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.second, menu);
return true;
}
}
如何將源對象中的點添加到我的主要活動中,以便我可以從該點將CAMERA_LAT和CAMERA_LNG設置為Lat和Lng。
我是JSON的新手,請幫我解決這個問題。
感謝您
String point[] = jsonObject.getJSONObject("source").getString("point").split(",");
double lat = Double.parseDouble(point[0]);
double lon = Double.parseDouble(point[1]);
應該讓你獲得積分。
如果您正在尋找其他活動,則應將它們放入Bundle
並將它們傳遞給下一個活動。 這是一篇解釋如何傳遞捆綁的帖子。
試試一個解串器。 我使用谷歌GSON庫來解決我遇到的類似問題。 看看我如何解析json對象中的heroes
數組。
public class GameDeserializer implements JsonDeserializer<Game> {
public Game deserialize(JsonElement json, Type typeOfT,
JsonDeserializationContext context) throws JsonParseException {
JsonObject obj = json.getAsJsonObject().get("game").getAsJsonObject();
String id = obj.get("id").getAsString();
Integer turn = obj.get("turn").getAsInt();
Integer maxTurns = obj.get("maxTurns").getAsInt();
Hero[] heroes = new Hero[4];
for (int i = 0; i < 4; i++) {
heroes[i] = context.deserialize(obj.get("heroes").getAsJsonArray().get(i), Hero.class);
}
Board board = context.deserialize(obj.get("board"), Board.class);
Hero player = context.deserialize(json.getAsJsonObject().get("hero"), Hero.class);
String token = json.getAsJsonObject().get("token").getAsString();
String viewUrl = json.getAsJsonObject().get("viewUrl").getAsString();
String playUrl = json.getAsJsonObject().get("playUrl").getAsString();
boolean finished = obj.get("finished").getAsBoolean();
return new Game(id, turn, maxTurns, heroes, board, player, token, viewUrl, playUrl, finished);
}
}
}
我不會回答,但你的問題很模糊,我不確定你是否需要json或String的幫助。 在后一種情況下,無視我的回答。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.