PHP如何接收JSON?,第1张

对于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,整条的保存在数据库,取出来的时候这样解释就行了。。。

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » PHP如何接收JSON?

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情