我有一个Java应用程序通过PHP脚本与SQL数据库通信,使用JSON。我以前使用JSON来json_encode一个数组,工作正常,你可以使用每个条目的键调用Java中的值。但是现在,我在PHP中json_encoded了一个字符串,如下所示:
json_encode("Succes!");
现在,我如何在Java业务部门中请求该值?我需要把一些东西放进jsonResponse.getString('key');
作为关键。关键是什么......
我希望你理解我的问题......
public String send(String username, String password, String database){
//Create a HTTPClient as the form container
HttpClient httpclient;
//Use HTTP POST method
HttpPost httppost;
//Create an array list for the input data to be sent
ArrayList<NameValuePair> nameValuePairs;
//Create a HTTP Response and HTTP Entity
HttpResponse response;
HttpEntity entity;
//Create new default HTTPClient
httpclient = new DefaultHttpClient();
//Create new HTTP POST with URL to php file as parameter
httppost = new HttpPost("http://192.168.144.150/login/add.php");
String pass = md5(password);
//Next block of code needs to be surrounded by try/catch block for it to work
try {
//Create new Array List
nameValuePairs = new ArrayList<NameValuePair>();
//place them in an array list
nameValuePairs.add(new BasicNameValuePair("username", username));
nameValuePairs.add(new BasicNameValuePair("password", pass));
nameValuePairs.add(new BasicNameValuePair("database", database));
//Add array list to http post
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
//assign executed form container to response
response = httpclient.execute(httppost);
//check status code, need to check status code 200
if(response.getStatusLine().getStatusCode()== 200){
//assign response entity to http entity
entity = response.getEntity();
//check if entity is not null
if(entity != null){
//Create new input stream with received data assigned
InputStream instream = entity.getContent();
//Create new JSON Object. assign converted data as parameter.
//JSONObject jsonResponse = new JSONObject(convertStreamToString(instream));
JSONArray a = new JSONArray(convertStreamToString(instream));
//assign json responses to local strings
String res = a.getString(0);
//Return the json response to the gui
return res;
} else {
//Toast.makeText(this, "kapot", Toast.LENGTH_SHORT).show();
return new String("De entiteit is leeg. Kortom: kapot");
}
} else {
//Toast.makeText(this, "statuscode was niet 200", Toast.LENGTH_SHORT).show();
return new String("De statuscode was niet 200.");
}
} catch(Exception e){
e.printStackTrace();
//Display toast when there is a connection error
//Change message to something more friendly
//Toast.makeText(this, "verbindingsproblemem", Toast.LENGTH_SHORT).show();
return new String("Er is een fout opgetreden. Controleer a.u.b. uw gegevens en de internetverbinding.");
}
不介意荷兰的部分,这不重要。
答案 0 :(得分:2)
您不需要任何密钥
在PHP中
json_encode("Succes!"); // returns "Succes!"
在Javascript jquery
中var obj = jQuery.parseJSON('"Succes!"');
alert(obj);
在Java json-simple
中Object obj = JSONValue.parse("\"Succes!\"");
System.out.println(obj);
编辑参考:@DaveRandom
JSON spec要求JSON包含在数组或对象中,如下所示:
| JSON文本是序列化对象或数组。
严格遵循规范的任何内容都不应该只接受“string”或数字文字或布尔文字(标量值)本身 - 但我怀疑很多解析器会,因为解析器经常被设计为原谅与标准的小偏差。这很烦人,因为这意味着人们会毫无问题地偏离标准,并想知道为什么他们在使用更严格的实施时会遇到问题。
在这种情况下,有一个参数应该返回NULL,但是根据它的行为方式,你可以自己手动构造JSON字符串的一部分,并从json_encode()获取其他部分
...当然,你不应该/不会这样做,但你可以。
只需将其视为XML - 如果没有根节点,就无法拥有有效的XML文档。它们都是为表示向量和复杂结构而设计的,假设如果你要传输简单/标量数据,你可以直接传递它。
答案 1 :(得分:2)
json_encode("Success!")
的输出为"Success"
,它本身不是有效的JSON document。有效的JSON文档的顶级实体(根)必须是对象或数组。
如果您只想返回一个字符串,可以通过以下方式执行:
使其成为数组中的唯一条目:
json_encode(array("Success!"))
...导致["Success!"]
,你可以在Java代码中使用这个(因为你说你正在使用org.java
库):
JSONArray a = new JSONArray(jsonStringFromPHP);
String s = a.getString(0);
或当然
String s = new JSONArray(jsonStringFromPHP).getString(0);
或者将其作为对象的唯一属性:
json_encode(array('result' => "Success!")
...这导致{"result":"Success!"}
,你可以在Java代码中使用这个:
JSONObject o = new JSONObject(jsonStringFromPHP);
String s = o.getString("result");
或当然
String s = new JSONObject(jsonStringFromPHP).getString("result");
您可以使用JSONTokenizer
来阅读当前的JSON 片段("Success!"
),但我不建议这样做。坚持交换有效的JSON文档。
答案 2 :(得分:2)
如果您必须通过Java应用程序中的密钥访问JSON数据,那么最好的选择是:
json_encode(array('message' => 'Success!'));
然后在Java中(根据您的示例代码):
jsonResponse.getString('message');