① 如何post一个json格式的数据
在Android/java平台上实现POST一个json数据:
JSONObject jsonObj = new JSONObject();
jsonObj.put("username", username);
jsonObj.put("apikey", apikey);
// Create the POST object and add the parameters
HttpPost httpPost = new HttpPost(url);
StringEntity entity = new StringEntity(jsonObj.toString(), HTTP.UTF_8);
entity.setContentType("application/json");
httpPost.setEntity(entity);
HttpClient client = new DefaultHttpClient();
HttpResponse response = client.execute(httpPost);
用curl可执行如下命令:
curl -l -H "Content-type: application/json" -X POST -d '{"phone":"13521389587","password":"test"}'
用jQuery:
$.ajax({
url:url,
type:"POST",
data:data,
contentType:"application/json; charset=utf-8",
dataType:"json",
success: function(){
...
}
})
PHP用cUrl实现:
$data = array("name" => "Hagrid", "age" => "36");
$data_string = json_encode($data);
$ch = curl_init(');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($data_string))
);
$result = curl_exec($ch);
。。。
② 如何使用JSON格式 POST数据到服务器
1.JSON数据格式x0dx0aa)以最简单的形式,您可以使用以下JSON来表示名称/值对:x0dx0a{“姓”:“布雷特”}x0dx0aB)可以创建包含多个名称/值对的记录,例如:x0dx0a{“FiestNeX”:“布雷特”,“LaSTNED”:“McCurkLin”,“email”:“布雷特@ NeWistalist.com”}x0dx0ac)可以创建一个值数组x0dx0a{“人”):x0dx0a{“FiestNeX”:“布雷特”,“LaSTNED”:“McCurkLin”,“email”:“布雷特@ NeWistalist.com”,x0dx0a{“FiestNeX”:“杰森”、“ListNeNe”:“Hunter”、“email”:“杰森@ servlet。com”}x0dx0a] ]x0dx0ad)当然,可以使用相同的语法来表示多个值(每个值包含多个记录):x0dx0a{“程序员”):x0dx0a{“FiestNeX”:“布雷特”,“LaSTNED”:“McCurkLin”,“email”:“布雷特@ NeWistalist.com”,x0dx0a{“FiestNeX”:“杰森”、“ListNeNe”:“Hunter”、“email”:“杰森@ servlet。com”}x0dx0a]x0dx0a“作者”:x0dx0a{姓〉:“艾萨克”、“姓氏”:“阿西莫夫”、“流派”:“科幻小说”,x0dx0a{“第一名字”:“TAD”、“姓氏”:“威廉姆斯”、“流派”:“幻想”}x0dx0a]x0dx0a“音乐家”:x0dx0a{“姓”:“埃里克”、“姓氏”:“克莱普顿”、“乐器”:“吉他”}x0dx0a]x0dx0a}x0dx0a请注意,在不同的主要条目(程序员、作者和音乐家)之间,记录中的实际名称/值对可能是不同的。JSON是完全动态的,允许在JSON结构的中间表示数据的方式。x0dx0a2。在JavaScript中使用JSONx0dx0aJSON是JavaScript原生格式,这意味着在JavaScript中处理JSON数据不需要任何特殊的API或工具包。x0dx0a2.1将JSON数据分配给变量x0dx0a例如,您可以创建一个新的JavaScript变量,并将其直接分配给JSON格式的数据字符串。x0dx0aVaR人=x0dx0a{“程序员”):x0dx0a{“FiestNeX”:“布雷特”,“LaSTNED”:“McCurkLin”,“email”:“布雷特@ NeWistalist.com”,x0dx0a{“FiestNeX”:“杰森”、“ListNeNe”:“Hunter”、“email”:“杰森@ servlet。com”}x0dx0a]x0dx0a“作者”:x0dx0a{姓〉:“艾萨克”、“姓氏”:“阿西莫夫”、“流派”:“科幻小说”,x0dx0a{“第一名字”:“TAD”、“姓氏”:“威廉姆斯”、“流派”:“幻想”}x0dx0a]x0dx0a“音乐家”:x0dx0a{“姓”:“埃里克”、“姓氏”:“克莱普顿”、“乐器”:“吉他”}x0dx0a]x0dx0a}x0dx0a2.2访问数据x0dx0a将数组放入JavaScript变量后,可以很容易地访问它。实际上,只使用点符号来表示数组元素。所以,如果你想访问程序员列表的第一个条目,你只需要在JavaScript中使用下面的代码:x0dx0a人。程序员(0)。x0dx0a注意,数组的索引从零开始。x0dx0a2.3修改JSON数据x0dx0a正如数据被访问一样,数据也可以以同样的方式修改:x0dx0a人。音乐家[ 1 ]。姓氏=“Rachmaninov”;x0dx0a2.4转换后串x0dx0aA)在JavaScript,这种转换也非常简单。x0dx0aString NejjStangeTeX= Posi.TjsString();x0dx0aB)可以将任何JavaScript对象转换为JSON文本。而不是处理最初使用JSON字符串来分配值的变量。为了转换名为MyObjor的对象,我们只需要执行相同的命令形式:x0dx0aString MyObjutsPixs= MyObjut.TjsString();x0dx0a说明:转换后的字符串用作Ajax调用的字符串,以完成异步传输。x0dx0a总结:如果您想处理大量的JavaScript对象,那么JSON几乎肯定是一个不错的选择,因此您可以轻松地将数据转换成可以在请求中发送到服务器端程序的格式。x0dx0a三。服务器端JSONx0dx0a3.1向服务器发送JSONx0dx0aa)通过get发送具有名称/值对的JSONx0dx0a在JSON数据中,将有空格和各种字符。Web浏览器通常希望继续编译它们。为了确保这些字符不会在服务器上造成混淆(或者在向服务器发送数据的过程中),您需要在JavaScript的转义()函数中执行以下操作:x0dx0aValueURL =“组织人”PHP?人=“+逃逸(人)tojSouthSnk());x0dx0aRequest.open(“获取”,URL,TRUE);x0dx0a请求.OnRead状态更改= UpDebug网页;x0dx0aRequest.send(NULL);x0dx0aB)使用POST请求发送JSON数据x0dx0a当您决定使用POST请求将JSON数据发送到服务器时,您不需要对代码进行很多更改。x0dx0aValueURL =“组织人”PHP?时间戳=“+新日期())GetTime();x0dx0aRequest.open(“POST”,URL,TRUE);x0dx0a请求.OnRead状态更改= UpDebug网页;x0dx0aRequest.setRequestHeader(“内容类型”,“应用程序/ X-WWW格式- URLNECODE”);x0dx0aRequest.send(Posi.TjsSouthScript)x0dx0a注意:赋值的格式必须是var MSG=EVE(+(Req.ReffStEXT++))。x0dx0a3.2解释服务器上的JSONx0dx0aa)处理JSON的两个步骤。x0dx0a对于用于编写服务器端程序的语言,可以找到相应的JSON解析器/工具箱/助手API。x0dx0a使用JSON解析器/工具箱/帮助器API从客户端获取请求数据,并将数据转换成脚本可以理解的内容。x0dx0ab)寻找JSON解析器x0dx0a找到JSON解析器或工具箱的最佳资源是JSON站点。如果使用JavaServlet,JSON.org上的Or.JSON包是一个不错的选择。在这种情况下,您可以从JSON网站下载JSON.ZIP,并添加到项目生成目录中包含的源文件。复合后
③ 如何使用JSON格式 POST数据到服务器
1. JSON的数据格式
a) 按照最简单的形式,可以用下面这样的 JSON 表示名称/值对:
{ "firstName": "Brett" }
b) 可以创建包含多个名称/值对的记录,比如:
{ "firstName": "Brett", "lastName":"McLaughlin", "email": "[email protected]" }
c) 可以创建值的数组
{ "people": [
{ "firstName": "Brett", "lastName":"McLaughlin", "email": "[email protected]" },
{ "firstName": "Jason", "lastName":"Hunter", "email": "[email protected]" }
]}
d) 当然,可以使用相同的语法表示多个值(每个值包含多个记录):
{ "programmers": [
{ "firstName": "Brett", "lastName":"McLaughlin", "email": "[email protected]" },
{ "firstName": "Jason", "lastName":"Hunter", "email": "[email protected]" }
],
"authors": [
{ "firstName": "Isaac", "lastName": "Asimov", "genre": "science fiction" },
{ "firstName": "Tad", "lastName": "Williams", "genre": "fantasy" }
],
"musicians": [
{ "firstName": "Eric", "lastName": "Clapton", "instrument": "guitar" }
]
}
注意,在不同的主条目(programmers、authors 和 musicians)之间,记录中实际的名称/值对可以不一样。JSON 是完全动态的,允许在 JSON 结构的中间改变表示数据的方式。
2. 在 JavaScript 中使用 JSON
JSON 是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON 数据不需要任何特殊的 API 或工具包。
2.1 将 JSON 数据赋值给变量
例如,可以创建一个新的 JavaScript 变量,然后将 JSON 格式的数据字符串直接赋值给它:
var people =
{ "programmers": [
{ "firstName": "Brett", "lastName":"McLaughlin", "email": "[email protected]" },
{ "firstName": "Jason", "lastName":"Hunter", "email": "[email protected]" }
],
"authors": [
{ "firstName": "Isaac", "lastName": "Asimov", "genre": "science fiction" },
{ "firstName": "Tad", "lastName": "Williams", "genre": "fantasy" }
],
"musicians": [
{ "firstName": "Eric", "lastName": "Clapton", "instrument": "guitar" }
]
}
2.2 访问数据
将这个数组放进 JavaScript 变量之后,就可以很轻松地访问它。实际上,只需用点号表示法来表示数组元素。所以,要想访问 programmers 列表的第一个条目的姓氏,只需在JavaScript 中使用下面这样的代码:
people.programmers[0].lastName;
注意,数组索引是从零开始的。
2.3 修改 JSON 数据
正如访问数据,可以按照同样的方式修改数据:
people.musicians[1].lastName = "Rachmaninov";
2.4 转换回字符串
a) 在 JavaScript 中这种转换也很简单:
String newJSONtext = people.toJSONString();
b) 可以将任何 JavaScript 对象转换为 JSON 文本。并非只能处理原来用 JSON 字符串赋值的变量。为了对名为 myObject 的对象进行转换,只需执行相同形式的命令:
String myObjectInJSON = myObject.toJSONString();
说明:将转换回的字符串作为Ajax调用的字符串,完成异步传输。
小结:如果要处理大量 JavaScript 对象,那么 JSON 几乎肯定是一个好选择,这样就可以轻松地将数据转换为可以在请求中发送给服务器端程序的格式。
3. 服务器端的 JSON
3.1 将 JSON 发给服务器
a) 通过 GET 以名称/值对发送 JSON
在 JSON 数据中会有空格和各种字符,Web 浏览器往往要尝试对其继续编译。要确保这些字符不会在服务器上(或者在将数据发送给服务器的过程中)引起混乱,需要在JavaScript的escape()函数中做如下添加:
var url = "organizePeople.php?people=" + escape(people.toJSONString());
request.open("GET", url, true);
request.onreadystatechange = updatePage;
request.send(null);
b) 利用 POST 请求发送 JSON 数据
当决定使用 POST 请求将 JSON 数据发送给服务器时,并不需要对代码进行大量更改,如下所示:
var url = "organizePeople.php?timeStamp=" + new Date().getTime();
request.open("POST", url, true);
request.onreadystatechange = updatePage;
request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
request.send(people.toJSONString());
注意:赋值时格式必须是var msg=eval('(' + req.responseText + ')');
3.2 在服务器上解释 JSON
a) 处理 JSON 的两步骤。
针对编写服务器端程序所用的语言,找到相应的 JSON 解析器/工具箱/帮助器 API。
使用 JSON 解析器/工具箱/帮助器 API 取得来自客户机的请求数据并将数据转变成脚本能理解的东西。
b) 寻找 JSON 解析器
寻找 JSON 解析器或工具箱最好的资源是 JSON 站点。如果使用的是 Java servlet,json.org 上的 org.json 包就是个不错的选择。在这种情况下,可以从 JSON Web 站点下载 json.zip 并将其中包含的源文件添加到项目构建目录。编译完这些文件后,一切就就绪了。对于所支持的其他语言,同样可以使用相同的步骤;使用何种语言取决于您对该语言的精通程度,最好使用您所熟悉的语言。
c) 使用 JSON 解析器
一旦获得了程序可用的资源,剩下的事就是找到合适的方法进行调用。如果在 servlet 中使用的是 org.json 包,则会使用如下代码:
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
StringBuffer jb = new StringBuffer();
String line = null;
try {
BufferedReader reader = request.getReader();
while ((line = reader.readLine()) != null)
jb.append(line);
} catch (Exception e) { //report an error }
try {
JSONObject jsonObject = new JSONObject(jb.toString());
} catch (ParseException e) {
// crash and burn
throw new IOException("Error parsing JSON request string");
}
// Work with the data using methods like...
// int someInt = jsonObject.getInt("intParamName");
// String someString = jsonObject.getString("stringParamName");
// JSONObject nestedObj = jsonObject.getJSONObject("nestedObjName");
// JSONArray arr = jsonObject.getJSONArray("arrayParamName");
// etc...
}