Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JSON编码字符串的键是什么_Java_Php_Json - Fatal编程技术网

Java JSON编码字符串的键是什么

Java JSON编码字符串的键是什么,java,php,json,Java,Php,Json,我有一个Java应用程序,使用JSON通过PHP脚本与SQL数据库通信。我以前使用过JSON对数组进行JSON_编码,效果很好,您可以使用每个条目的键调用Java中的值。但现在,我用PHP编码了一个字符串,如下所示: json_编码(“成功!”) 现在,我如何在业务的Java端请求该值?我需要一些东西放入jsonResponse.getString('key')作为一个键。关键是什么 我希望你能理解我的问题 public String send(String username, String p

我有一个Java应用程序,使用JSON通过PHP脚本与SQL数据库通信。我以前使用过JSON对数组进行JSON_编码,效果很好,您可以使用每个条目的键调用Java中的值。但现在,我用PHP编码了一个字符串,如下所示:
json_编码(“成功!”)
现在,我如何在业务的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.");
}
公共字符串发送(字符串用户名、字符串密码、字符串数据库){
//创建一个HTTPClient作为表单容器
HttpClient-HttpClient;
//使用HTTP POST方法
HttpPost-HttpPost;
//为要发送的输入数据创建数组列表
ArrayList名称值对;
//创建HTTP响应和HTTP实体
HttpResponse响应;
http实体;
//创建新的默认HTTPClient
httpclient=新的DefaultHttpClient();
//以php文件的URL作为参数创建新的HTTP POST
httppost=新的httppost(“http://192.168.144.150/login/add.php");
字符串pass=md5(密码);
//下一个代码块需要被try/catch块包围,才能正常工作
试一试{
//创建新数组列表
nameValuePairs=新的ArrayList();
//将它们放入数组列表中
添加(新的BasicNameValuePair(“用户名”,username));
添加(新的BasicNameValuePair(“密码”,pass));
添加(新的BasicNameValuePair(“数据库”,数据库));
//将数组列表添加到http post
setEntity(新的UrlEncodedFormEntity(nameValuePairs));
//将已执行的表单容器分配给响应
response=httpclient.execute(httppost);
//检查状态代码,需要检查状态代码200
if(response.getStatusLine().getStatusCode()==200){
//将响应实体分配给http实体
entity=response.getEntity();
//检查实体是否不为空
如果(实体!=null){
//使用已分配的接收数据创建新的输入流
InputStream instream=entity.getContent();
//创建新的JSON对象。将转换后的数据指定为参数。
//JSONObject jsonResponse=新的JSONObject(convertStreamToString(instream));
JSONArray a=新JSONArray(convertStreamToString(流内));
//将json响应分配给本地字符串
String res=a.getString(0);
//将json响应返回到gui
返回res;
}否则{
//Toast.makeText(这是“kapot”,Toast.LENGTH_SHORT).show();
返回新字符串(“De entiteit是leeg.Kortom:kapot”);
}
}否则{
//Toast.makeText(这个“状态码是niet 200”,Toast.LENGTH_SHORT.show();
返回新字符串(“De状态码为niet 200”);
}
}捕获(例外e){
e、 printStackTrace();
//出现连接错误时显示toast
//将消息更改为更友好的消息
//Toast.makeText(这是“verbindingsproblemem”,Toast.LENGTH_SHORT).show();
返回新字符串(“Er是opgetreden.Controleer a.u.b.uw GEVENS en de internetverbinding”);
}
不要介意荷兰语部分,它不重要。

你不需要任何钥匙

在PHP中

json_encode("Succes!"); // returns "Succes!"  
在Javascript中

在爪哇

编辑参考:@DaveRandom

需要将JSON包装在数组或对象中,如它所述:

|JSON文本是序列化的对象或数组

严格遵循规范的任何内容都不应只接受“字符串”或数字文字或布尔文字(标量值)但我怀疑很多解析器都会,因为解析器通常被设计成能够原谅标准的微小偏差。这很烦人,因为这意味着人们随后会毫无问题地偏离标准,并且想知道为什么他们在使用更严格的实现时会遇到问题

有一个论点认为在这种情况下它应该返回NULL,但通过它的行为方式,您可以自己手动构造JSON字符串的部分,并从JSON_encode()获取其他部分

…当然,你不应该/不会这样做,但你可以

把它想象成XML——没有根节点,就不可能有一个有效的XML文档。它们都是为表示向量和复杂结构而设计的,假设您有简单/标量数据要传输,就可以直接传递它


json\u encode(“Success!”)
的输出是
“Success”
,它本身不是有效的。有效的json文档的顶级实体(根)必须是对象或数组

如果只想返回单个字符串,可以通过以下方式执行:

  • 使其成为数组中的唯一项:

    json_encode(array("Success!"))
    
    …这将导致
    [“Success!”]
    ,您可以在Java代码中这样使用它(因为您说您正在使用
    org.Java
    库):

    当然了

    String s = new JSONArray(jsonStringFromPHP).getString(0);
    
        String s = new JSONObject(jsonStringFromPHP).getString("result");
    
  • 或使其成为对象的唯一属性:

    json_encode(array('result' => "Success!")
    
    …这将导致
    {“result”:“Success!”}
    ,您可以在Java代码中这样使用它:

    JSONObject o = new JSONObject(jsonStringFromPHP);
    String s = o.getString("result");
    
  • 当然了

    String s = new JSONArray(jsonStringFromPHP).getString(0);
    
        String s = new JSONObject(jsonStringFromPHP).getString("result");
    

    您可能可以使用读取当前的JSON片段(
    “Success!”
    ),但我不建议这样做。请坚持交换有效的JSON文档。

    如果您必须在Java应用程序中通过密钥访问JSON数据,您最好的选择是:

    json_encode(array('message' => 'Success!'));
    
    然后在Java中(根据示例代码):


    你用的是什么Java JSON库?Java!==Javascript…你是指Java还是Javascript?我当然是指Java,否则我的问题中会说Javascript…@HaroldHolsappel:没必要小题大做,你不会相信有多少Javascript问题被OP标记为
    Java
    。:-)既然你提到使用PHP(所以服务器是PHP),这使得Mark更加有理由怀疑您是否只是说错了(因为不清楚Java在哪里)
    json_encode(array('message' => 'Success!'));
    
    jsonResponse.getString('message');