我开发了一个Android应用程序,请求从响应JSON格式的服务器的位置坐标(目前它只发送两个地方):
这是来自服务器的php代码:
$place = $db->getCoordinates($name);
if ($place != false) {
$response[1]["success"] = 1;
$response[1]["place"]["H"] = $place[1]["H"];
$response[1]["place"]["V"] = $place[1]["V"];
$response[1]["place"]["placeid"] = $place[1]["placeid"];
$response[1]["place"]["name"] = $place[1]["name"];
$response[1]["place"]["type"] = $place[1]["type"];
$response[1]["place"]["note"] = $place[1]["note"];
// place found
// echo json with success = 1
$response[2]["success"] = 1;
$response[2]["place"]["H"] = $place[2]["H"];
$response[2]["place"]["V"] = $place[2]["V"];
$response[2]["place"]["placeid"] = $place[2]["placeid"];
$response[2]["place"]["name"] = $place[2]["name"];
$response[2]["place"]["type"] = $place[2]["type"];
$response[2]["place"]["note"] = $place[2]["note"];
echo json_encode($response);
}
当应用程序获取坐标时,它会尝试以这种方式解析坐标:
JSONObject json_places = userFunction.getPlaces();
JSONObject places = json_places.getJSONObject("1");
JSONObject coord = places.getJSONObject("place");
getplaces():
public JSONObject getPlaces(){
// Building Parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("tag", allcoordinates_tag));
JSONObject json = jsonParser.getJSONFromUrl("http://"+ip+placesURL, params);
// return json
Log.i("JSON", json.toString());
return json;
}
JSONParser:
public class JSONParser {
static InputStream is = null;
static JSONObject jObj = null;
static String json = "";
// constructor
public JSONParser() {
}
public JSONObject getJSONFromUrl(String url, List<NameValuePair> params) {
// Making HTTP request
try {
// defaultHttpClient
HttpPost httpPost = new HttpPost(url);
HttpParams httpParameters = new BasicHttpParams();
int timeoutConnection = 9000;
HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection);
int timeoutSocket = 9000;
HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);
DefaultHttpClient httpClient = new DefaultHttpClient(httpParameters);
httpPost.setEntity(new UrlEncodedFormEntity(params));
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
catch (ConnectTimeoutException e) {
e.printStackTrace();
}
catch (ClientProtocolException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
json = sb.toString();
Log.e("JSON", json);
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
}
// try parse the string to a JSON object
try {
jObj = new JSONObject(json);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
// return JSON String
return jObj;
}
}
下面是带有错误的JSON:
当应用程序试图解析JSON响应时,它会崩溃,并发送一个JSON异常:类型java.lang.字符串的值不能转换为JSONObject如何解决这个问题?谢了
刚开始删除“Array”,json的格式就不好了
您的Web服务没有创建有效的JSON。JSON字符串只能以{
或[
开头。你的从String"Array"
开始。
您可以在这里的Wikipedia条目中阅读JSON格式。
在这里,我试图将数据发送到我的web服务器,并使用解析json并将数据插入mysql数据库。我得到一个错误,表示值stdClass为
我将客户数据对象存储为共享首选项(Android)中的JSON字符串,并尝试检索转换回客户对象的字符串并用于验证。从对象到JSON字符串的转换非常好,并且存储在首选项中(作为键值(字符串)对)。 当我尝试使用-我总是得到相同的错误值...类型java.lang.字符串不能转换为JSONObject。 我希望一双不同的眼睛能捕捉到我不能捕捉到的东西。带有数据的错误消息(屏蔽): Value 类型为j
问题内容: 我有一个JSON文件,其中包含2个JSON数组:一个用于路线的数组,一个用于景点的数组。 一条路线应由用户导航到的多个景点组成。不幸的是我遇到了错误: JSONException:无法将类型为java.lang.String的值转换为JSONObject 这是我的变量和解析JSON文件的代码: Log.i(“ JSON Parser”,json); 告诉我在生成的字符串的开头有一个奇怪
我正在开发一个android应用程序,我正在尝试使用Volley库。我无法解决的问题是关于JSON的。我检查了我的php文件、结果和Java代码,但仍然得到相同的错误。 有趣的是,截击日志不显示错误消息,但日志显示错误消息。 和 这是我的PHP代码: 结果如下: 和我的Java代码: 我也听说了GSON。这是解决办法吗?有人能帮帮我吗?提前感谢!!
我正在抛出一个JSON异常,我不知道为什么会抛出它。我已经看了几乎所有和我一样的问题,但我认为我的不同。因此,我从一个网页获得一个JSONArray,它发送的JSON是有效的(我用验证器检查了它)。在JSONArray上执行getJSONObject时引发异常。 这正是它所说的(个人信息被标出): 这是我的Java代码: 错误发生在我去的行: 任何帮助都非常感谢。
我为一个网站做了一个应用程序。它有一个JSON API。im试图获取结果的URL是: