我有一个来自XML文件
的JSON字符串a:2:{i:0;s:6:"Monday";i:1;s:7:"Tuesday";}
我想通过javascript从这个字符串中得到逗号分隔的逗号。 请帮助我是JSON的新手。
答案 0 :(得分:2)
此字符串a:2:{i:0;s:6:"Monday";i:1;s:7:"Tuesday";}
是通过PHP的序列化数组。
在将其转换为JSON字符串之前,您需要对其进行反序列化。然后你可以用javascript解析它。
unserialize& php中的json_encode:
$json = json_encode(unserialize('a:2:{i:0;s:6:"Monday";i:1;s:7:"Tuesday";}'));
echo $json;
上面返回有效的json字符串,如下所示:
["Monday","Tuesday"]
现在你可以将它解析为json对象,如下所示:
<script type="text/javascript">
var jsonObj = JSON.parse('["Monday","Tuesday"]');
alert(jsonObj[0]); // alerts "Monday"
</script>
答案 1 :(得分:0)
你的节目使用PHP反序列化功能。它有一个js实现
function unserialize ( inp ) { // Creates a PHP value from a stored representation
//
// + original by: Arpad Ray (mailto:arpad@php.net)
error = 0;
if (inp == "" || inp.length < 2) {
errormsg = "input is too short";
return;
}
var val, kret, vret, cval;
var type = inp.charAt(0);
var cont = inp.substring(2);
var size = 0, divpos = 0, endcont = 0, rest = "", next = "";
switch (type) {
case "N": // null
if (inp.charAt(1) != ";") {
errormsg = "missing ; for null";
}
// leave val undefined
rest = cont;
break;
case "b": // boolean
if (!/[01];/.test(cont.substring(0,2))) {
errormsg = "value not 0 or 1, or missing ; for boolean";
}
val = (cont.charAt(0) == "1");
rest = cont.substring(1);
break;
case "s": // string
val = "";
divpos = cont.indexOf(":");
if (divpos == -1) {
errormsg = "missing : for string";
break;
}
size = parseInt(cont.substring(0, divpos));
if (size == 0) {
if (cont.length - divpos < 4) {
errormsg = "string is too short";
break;
}
rest = cont.substring(divpos + 4);
break;
}
if ((cont.length - divpos - size) < 4) {
errormsg = "string is too short";
break;
}
if (cont.substring(divpos + 2 + size, divpos + 4 + size) != "\";") {
errormsg = "string is too long, or missing \";";
}
val = cont.substring(divpos + 2, divpos + 2 + size);
rest = cont.substring(divpos + 4 + size);
break;
case "i": // integer
case "d": // float
var dotfound = 0;
for (var i = 0; i < cont.length; i++) {
cval = cont.charAt(i);
if (isNaN(parseInt(cval)) && !(type == "d" && cval == "." && !dotfound++)) {
endcont = i;
break;
}
}
if (!endcont || cont.charAt(endcont) != ";") {
errormsg = "missing or invalid value, or missing ; for int/float";
}
val = cont.substring(0, endcont);
val = (type == "i" ? parseInt(val) : parseFloat(val));
rest = cont.substring(endcont + 1);
break;
case "a": // array
if (cont.length < 4) {
errormsg = "array is too short";
return;
}
divpos = cont.indexOf(":", 1);
if (divpos == -1) {
errormsg = "missing : for array";
return;
}
size = parseInt(cont.substring(1, divpos - 1));
cont = cont.substring(divpos + 2);
val = new Array();
if (cont.length < 1) {
errormsg = "array is too short";
return;
}
for (var i = 0; i + 1 < size * 2; i += 2) {
kret = unserialize(cont, 1);
if (error || kret[0] == undefined || kret[1] == "") {
errormsg = "missing or invalid key, or missing value for array";
return;
}
vret = unserialize(kret[1], 1);
if (error) {
errormsg = "invalid value for array";
return;
}
val[kret[0]] = vret[0];
cont = vret[1];
}
if (cont.charAt(0) != "}") {
errormsg = "missing ending }, or too many values for array";
return;
}
rest = cont.substring(1);
break;
case "O": // object
divpos = cont.indexOf(":");
if (divpos == -1) {
errormsg = "missing : for object";
return;
}
size = parseInt(cont.substring(0, divpos));
var objname = cont.substring(divpos + 2, divpos + 2 + size);
if (cont.substring(divpos + 2 + size, divpos + 4 + size) != "\":") {
errormsg = "object name is too long, or missing \":";
return;
}
var objprops = unserialize("a:" + cont.substring(divpos + 4 + size), 1);
if (error) {
errormsg = "invalid object properties";
return;
}
rest = objprops[1];
var objout = "function " + objname + "(){";
for (key in objprops[0]) {
objout += "" + key + "=objprops[0]['" + key + "'];";
}
objout += "}val=new " + objname + "();";
eval(objout);
break;
default:
errormsg = "invalid input type";
}
return (arguments.length == 1 ? val : [val, rest]);
}
之后如果你得到对象(不是数组)你将需要从它创建数组并使用连接数组方法来获得你需要的东西。