PHP如何接收JSON?
对于json,PHP有对应的方法进行操作。
一般而言,json会以字符串形式传给PHP脚本,一般都是放在$_POST里面,
<php // 接收 $json_parameter = $_POST['json_str']; // 处理, 变成数组 $array = json_decode($json_parameter); // PHP 把数组数据变成json格式字符串,发给页面 $demo = array( 'key' => 'value', 'key2' => 'value2' ); $demo_json = json_encode($demo); // 格式是{"key":"value","key2":"value2"} echo $demo_json;
Web Service接口方法
[WebMethod]
public string Project(string paramaters)
{
return paramaters;
}
实现代码
public string Post(string methodName, string jsonParas)
{
string strURL = Url + "/" + methodName;
//创建一个HTTP请求
HttpWebRequest request = (HttpWebRequest)WebRequestCreate(strURL);
//Post请求方式
requestMethod = "POST";
//内容类型
requestContentType = "application/x-www-form-urlencoded";
//设置参数,并进行URL编码
//虽然我们需要传递给服务器端的实际参数是JsonParas(格式:[{\"UserID\":\"0206001\",\"UserName\":\"ceshi\"}]),
//但是需要将该字符串参数构造成键值对的形式(注:"paramaters=[{\"UserID\":\"0206001\",\"UserName\":\"ceshi\"}]"),
//其中键paramaters为WebService接口函数的参数名,值为经过序列化的Json数据字符串
//最后将字符串参数进行Url编码
string paraUrlCoded = SystemWebHttpUtilityUrlEncode("paramaters");
paraUrlCoded += "=" + SystemWebHttpUtilityUrlEncode(jsonParas);
byte[] payload;
//将Json字符串转化为字节
payload = SystemTextEncodingUTF8GetBytes(paraUrlCoded);
//设置请求的ContentLength
requestContentLength = payloadLength;
//发送请求,获得请求流
Stream writer;
try
{
writer = requestGetRequestStream();//获取用于写入请求数据的Stream对象
}
catch (Exception)
{
writer = null;
ConsoleWrite("连接服务器失败!");
}
//将请求参数写入流
writerWrite(payload, 0, payloadLength);
writerClose();//关闭请求流
String strValue = "";//strValue为http响应所返回的字符流
HttpWebResponse response;
try
{
//获得响应流
response = (HttpWebResponse)requestGetResponse();
}
catch (WebException ex)
{
response = exResponse as HttpWebResponse;
}
Stream s = responseGetResponseStream();
//服务器端返回的是一个XML格式的字符串,XML的Content才是我们所需要的Json数据
XmlTextReader Reader = new XmlTextReader(s);
ReaderMoveToContent();
strValue = ReaderReadInnerXml();//取出Content中的Json数据
ReaderClose();
sClose();
return strValue;//返回Json数据
}
Url的格式样例:"http://596829106:8087/IFT_Projectasmx"
methodName参数就是"Project"
JsonParas就是使用C# JavaScriptSerializer将List<Object>类型的对象序列化之后得到的值,数据格式:[{\"UserID\":\"0206001\",\"UserName\":\"ceshi\"}],Json数据中的中括号代表由着多个对象集合序列化,花括号代表一个对象序列化得到的结果,花括号里面的内容使用键值对的方式展示,多个属性之间用逗号隔开,每个对象也用逗号隔开。
requestContentType必须设置值,建议使用"application/x-www-form-urlencoded",设置其他值就很容易报服务器内部异常,使用这种方式服务接口方法返回的是xml格式的字符串
payload将请求参数转换成二进制来保存,此处一定要将“paramaters”加入其中,不然会报异常缺少参数,paramaters就是服务接口函数的参数名。函数中使用了URL编码,注意在编码的时候只需要将键和值进行编码,不要将中间的=进行编码,不然getResponse的时候会报异常。
requestContentLength也是必须设置的值
在得到响应流之后Stream s = responseGetResponseStream();需要使用Reader来解析响应流,这个地方我使用的是XmlTextReader,因为我服务方法返回的是xml格式的字符串,其中Json数据在xml的Content中。在取出Json数据之后,再进行相应的反序列化即可得到对象。
<script language="jscript" runat="server">
Arrayprototypeget = function(x) { return this[x]; };
function parseJSON(strJSON) { return eval("(" + strJSON + ")"); }
</script>
<%
Dim json, obj
json = "{a:""aaa"", b:{ name:""bb"", value:""text"" }, c:[""item0"", ""item1"", ""item2""]}"
Set obj = parseJSON(json)
ResponseWrite obja & "<br />" '直接获取
ResponseWrite objbname & "<br />" '获取指定key
ResponseWrite objclength & "<br />" '获取条数
ResponseWrite objcget(0) & "<br />" 'C的第一条
ResponseWrite objc & "<br />" '获取全部
Set obj = Nothing
%>
然后就是对应的更新到数据库就行了。
建议让JSON,整条的保存在数据库,取出来的时候这样解释就行了。。。
0条评论