1. 關於php用json傳遞數組到js中
看你怎麼傳遞這個json的.
如果是字元串傳遞過去, 那麼這個串要eval 下, 或者使用 json2.js 中的 JSON.parse(jsontext) 方法
附: json2.js 地址:
https://github.com/douglascrockford/JSON-js
或者點擊直接下載:
如果是JSONP 協議傳遞過去, 就可以直接使用;
建議採用jquery+ajax模式來處理json, 哪怕是同步的, 調用起來也比直接 post/get 來的方便.
2. php 轉json 加引號
請輸入你的答案當我們在結合php和javascript實現某些功能時,經常會用到json。json是js的一種數據格式,可以直接被js解析。而php無法直接讀取json數據,但是php提供了json_decode函數來對json數據進行轉化,從而可以被php腳本訪問。同時,php也提供了json_encode函數來將數據轉化成json格式。那麼,js中的原生json與php中通過json_encode函數轉化後的json是否完全一樣呢?今天,站長就和大家一起來探討這個問題。我們通過php向javascript傳遞數組數據時,通常要將其轉化為json格式,一遍javascript來獲取,那麼我們就以數組為例,先來看一下兩者之間的區別。1、一維數組考慮php數組$array=array("1","2","3");使用json_encode函數轉化後,對應的json字元串為["1","2","3"]。細心的朋友很快就發現,轉化後得到的json字元串,就是javascript中的數組形式,那麼是否可以用js的數組訪問方式來訪問呢?當然是可以的,但是你將這個json字元串傳遞給給js時,需要使用urlencode函數對其編碼,如:')"id="aj">訪問json我們可以用下面的js代碼來驗證:functionshow(str){varjobj=eval_r(decodeURI(str));alert(jobj[2]);}大家自己試一試就會發現,是的,可以用js中訪問一維數組的方式來訪問它。eval方法將json字元串解釋為json對象,因為傳遞過來的是字元串,不轉化的話,你得到將是字元串中第三個字元的值。我們再來對這個一維數組做一下變化,我們發現上面的一維數組沒有指定索引,所以它默認為數字索引,現在我們來給它加上鍵名:考慮php數組$array=array('a'=>'1','b'=>'2','c'=>'3');使用json_encode函數轉化後,對應的json字元串為{"a":"1","b":"2","c":"3"}。我們很快就發現了其中的不同,最明顯的就是字元串兩端的[]變成了{},那麼這個字元串是否也可以按上面那樣處理後被js訪問呢?我們不防試一試:'1','b'=>'2','c'=>'3')));?>')"id="aj">訪問jsonfunctionshow(str){varjobj=eval_r(decodeURI(str));alert(jobj.a);}大家如果動手試了就知道,點擊鏈接後,沒有出現彈窗。為什麼呢?是PHP生成的json字元串格式不對嗎?不是的,這是我們在使用eval函數解釋的時候,出錯了。把上面的函數代碼換成:functionshow(str){varjobj=eval_r('('+decodeURI(str)+')');alert(jobj.a);}再試試吧!怎麼樣,可以訪問了吧。這告訴我們,在使用eval方法處理帶有鍵名的json字元串時,需要在字元串兩端加速括弧。至於為什麼,站長也不知道,站在巨人的肩膀上而已。這里要注意,盡管PHP生成的json字元串{"a":"1","b":"2","c":"3"}被傳遞給js後無法被直接解釋為json格式,但是如果你在js中使用該字元串直接創建json數據,是可以的。試試下面的代碼吧:varjobj={"a":"1","b":"2","c":"3"};alert(jobj.b);2、二維數組二維數組在PHP用的應用非常廣泛,因此了解二維數組轉化後的json格式非常重要。有了上面的例子做鋪墊,下面站長就直接給出示例代碼:')"id="aj">訪問jsonfunctionshow(str){varjobj=eval_r(decodeURI(str));alert(jobj[0][0]);}大家運行,會發現,這跟一維數組差不多,這是不帶鍵名的例子,因此在show函數中,去掉字元串兩端的括弧也是可以的。下面,我們對二維數組進行一下變化,在第二維中加入鍵名,請看示例代碼:'1',"b"=>'2','3'))));?>')"id="aj">訪問jsonfunctionshow(str){varjobj=eval_r('('+decodeURI(str)+')');alert(jobj[0].a);}大家運行代碼後,發現,這里我們訪問json數據的方式有點不一樣。上面我們用的是alert(jobj[0][0]);而這里我們用的是alert(jobj[0].a);不要問我為什麼,就是這樣。這就是json的訪問方式。上面的例子,我們對二維數組的第二維添加了鍵名,下面我們對第一維添加鍵名,看看訪問方式又有什麼不同:array('1','2','3'))));?>')"id="aj">訪問jsonfunctionshow(str){varjobj=eval_r('('+decodeURI(str)+')');alert(jobj.k[1]);}這里我們使用的是jobj.k[1]這樣的方式,大家一定已經發現了,只要數組中含有鍵名,當數組被轉化為json格式後,就要使用json對象.鍵名這樣的方式來訪問該鍵下的元素,上面的例子中,k鍵下的數組元素是數字索引,所以在json中使用k[1]這樣的方式來訪問。下面,我們對數組的第一維和第二維都添加鍵名:array("a"=>'1','2','3'))));?>')"id="aj">訪問jsonfunctionshow(str){varjobj=eval_r('('+decodeURI(str)+')');alert(jobj.k.a);}正如上面所提到的,只要含有鍵名,就必須以json對象.鍵名的方式來訪問,如果有多個鍵就要用json對象.鍵名.鍵名,不要問我為什麼,這就是json的訪問方式,只有javascript的發明者能向你解釋,他為什麼要這樣規定。結論:1、將php中的數組轉化為json字元串傳遞給js時。如果數組沒有指定鍵名,那麼可以直接使用js的eval方法將其轉化為json格式供js處理;如果數組中含有鍵名,那麼在使用eval方法處理時,需要使用()將json字元串括起來。2、如果數組中含有鍵名,轉化為json字元串後,在js中要用json對象.鍵名.鍵名的方式來訪問,如果是數字索引則用json對象[1]或者json對象.鍵名[1]這樣的方式。上面,我們主要討論了,在PHP向js傳遞json字元串時,需要注意的事項。下面我們再來討論,用js向php傳遞json字元串時需要如何處理。聰明的你肯定已經知道了,只要將json數據用引號引起來作為字元串傳遞給PHP【通常用ajax進行】就可以用json_decode函數解碼了。沒錯!就是這樣!但是在構造json字元串的時候一定要仔細,如果你不經常構造json字元串,那麼不妨用echojson_encode(array('k'=>array("a"=>'1','2','3')))這樣的方式,查看你需要構造的目標字元串的json格式。這樣你就可以在js中根據你想要的結果來構造了!好了,今天對php和js之間如何使用json數據進行通信就討論到這里,大家可以自己再試試將php的對象類型進行json編碼後如何傳遞給js。
3. php用curl的post方法傳遞json包的時候,接受方是怎麼獲取的呢
假設POST的數據為:{"data":"abc"}
POST參數為:data
同樣以PHP為例,接受並處理請求的相關代碼如下:
<?php
extract($_POST);//將數組中的key攤成變數,並導入key對應的值
if(!empty($data))
{
$data=json_decode($data);//json字孫虧漏符串解碼成json數據
var_mp($data);//列印json數據
//輸出結果
object(stdClass)[1]
public'則爛data'空頌=>string'abc'(length=3)
}
4. php傳送二維數組給jq,以json格式的數據傳
<?php
header("Content-type: text/json; charset=utf-8");
$arr = array(
array('id"=>1,"name"=>"kkasfl"),
array('id"=>2,"name"=>"f6dsaf6dfs6ds")
);
echo json_encode($arr);
5. php怎樣接收整個json數組
json_decode
PHP json_decode() 函數用於對 JSON 格式的字元串進行解碼,並轉換為 PHP 變數。
語法
mixedjson_decode($json[,$assoc=false[,$depth=512[,$options=0]]])
參數
json_string: 待解碼的 JSON 字元串,必須是 UTF-8 編碼數據
assoc: 當該參數為 TRUE 時,將返回數組,FALSE 時返回對象。
depth: 整數類型的參數,它指定遞歸深度
options: 二進制掩碼,目前只支持 JSON_BIGINT_AS_STRING 。
6. php傳過來的json數據js怎麼調用
json對象中的屬性用 「.」(點)來指向訪問。
如:
jsonData是返回的json數據。
jsonData.username jsonData.id
這樣調用
7. PHP使用POST傳遞json數據的接收與處理問題
前端傳給伺服器的只是json 格式的字元串,使用json_decode,
mixed json_decode ( string $json [, bool $assoc ] )
var_mp(json_decode($json));
var_mp(json_decode($json, true));
如果不帶參數,則返回為對象
帶上true時,返回數組
foreach($ARR as $k=>$v){
echo 'key='.$k.';value='.$v;
}
單獨處理每個key 和對應的value就好
8. PHP生成多維數組的json格式
php中將數組格式換換為json格式可以使用 json_encode函數。
示例代碼如下:
<?php
//定義數組
$arr=array('city'=>array('北京','上海','廣州'),'order'=>array(1,2,3));
//將數組轉換為json格式
var_mp(json_encode($arr));
?>
json格式效果:
9. PHP怎麼把多個數組揉成一個json字元串
<?php
//創建數組
$array = array(
"name" => "Hza",
"age" => 21
);
//數組轉化為json格式
echo json_encode($array);
echo "<br />";
//創建類
class Student {
public $name;
public $age;
//初始化是賦值
function __construct($name, $age)
{
$this->name = $name;
$this->age = $age;
}
//魔術方法 把對象轉換成字元串格式 以備使用json_encode()函數
function __tostring() {
//對象轉化為json格式
return json_encode($this,JSON_FORCE_OBJECT);
}
}
//實例化對象
$person1 = new Student('Hza', 20);
//輸出json格式
echo $person1;
?>
(9)php傳遞數組json擴展閱讀:
json六個構造字元:
begin-array = ws %x5B ws ; [ 左方括弧
begin-object = ws %x7B ws ; { 左大括弧
end-array = ws %x5D ws ; ] 右方括弧
end-object = ws %x7D ws ; } 右大括弧
name-separator = ws %x3A ws ; : 冒號
value-separator = ws %x2C ws ; , 逗號
在這六個構造字元的前或後允許存在無意義的空白符(ws):
ws = *(%x20 /; 空間
%x09 /; 水平標簽
%x0A /; 換行或換行
%x0D); 回程