我正在尝试将traceroutes映射到谷歌地图。
我在php中有一个带有traceroute数据的数组
$c=ip,latitude,longitude, 2nd ip, its latitude, longitude, ....target ip, its lat, its lng
我使用了json_encode($c, JSON_FORCE_OBJECT)
并保存了文件
现在,如何使用javascript访问它,直接将其等同于新的JS对象?
之前我曾经在硬盘上有这样的数据格式
var data12 = {
"route":[
{
"ip": "some ip",
"longitude": "some lng",
"latitude": "some lat",
.....
在我的javascript中用作
data=data12.route;
然后只需将成员作为数据[1] .latitude
来访问答案 0 :(得分:25)
我建议使用jQuery library。缩小版本的大小仅为31 kB,并提供了许多有用的功能。
要解析JSON,只需执行
var obj = jQuery.parseJSON ( ' {"name" : "John"} ' );
您现在可以轻松访问所有内容:
alert ( obj.name );
注意:jQuery使用浏览器的本机JSON解析器(如果可用),使用eval ()
方法非常快速且安全得多。
编辑:要从服务器端向客户端获取数据,有两种可能:
1。)使用AJAX请求(使用jQuery非常简单):
$.ajax ( {
url: "yourscript.php",
dataType: "json",
success: function ( data, textStatus, jqXHR ) {
// process the data, you only need the "data" argument
// jQuery will automatically parse the JSON for you!
}
} );
2。)在页面生成时将JSON对象写入Javascript源代码:
<?php
$json = json_encode ( $your_array, JSON_FORCE_OBJECT );
?>
<script src="http://code.jquery.com/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[
var json_obj = jQuery.parseJSON ( ' + <?php echo $json; ?> + ' );
//]]>
</script>
答案 1 :(得分:2)
我知道这已经过时了,但我最近发现自己在寻找这个。这里没有任何答案适用于我的案例,因为我的价值观中有引用。这里的想法是在回显到页面之前对数组进行base64编码。这样引号就不会发生冲突。
< ?php
$names = ['first' => "some'name"];
?>
var names = JSON.parse(atob('< ?php echo base64_encode(json_encode($names)); ?>'));
console.log(names['first']);
答案 2 :(得分:1)
我可以通过使用来自后端的PHP的json_encode()来获取JSON数组,如下例所示:
<!doctype html>
<html>
<script type="text/javascript">
var json = <?php echo json_encode(array(1 => '123', 'abc' => 'abd', 2 => 5));?>;
console.log(json[1]);
console.log(json.abc);
</script>
</html>
没有引号表示打印出的任何内容的eval()。这是我们经常用来快速添加初始值到AJAX页面的快速入侵。
答案 3 :(得分:0)
不需要jquery,只需:
var array= <?php echo json_encode($array); ?>;
console.log(array->foo);
答案 4 :(得分:0)
我们必须在javascript中显示json编码格式,使用下面的一个:
var responseNew = JSON.parse(' {"name" : "John"} ' );
alert(responseNew['name']);
答案 5 :(得分:0)
我猜这个功能对你有用:
function json_encode4js($data) {
$result = '{';
$separator = '';
$count = 0;
foreach ($data as $key => $val) {
$result .= $separator . $key . ':';
if (is_array($val)){
$result .= json_encode4js($val).(!$separator && count($data) != $count ? ",":"");
continue;
}
if (is_int($val)) {
$result .= $val;
} elseif (is_string($val)) {
$result .= '"' . str_replace('"', '\"', $val) . '"';
} elseif (is_bool($val)) {
$result .= $val ? 'true' : 'false';
} elseif (is_null($val)) {
$result .= 'null';
} else {
$result .= $val;
}
$separator = ', ';
$count++;
}
$result .= '}';
return $result;
}
$a = array(
"string"=>'text',
'jsobj'=>[
"string"=>'text',
'jsobj'=>'text2',
"bool"=>false
],
"bool"=>false);
var_dump( json_encode4js($a) ); //output: string(77) "{string:"text", jsobj:{string:"text", jsobj:"text2", bool:false}, bool:false}"
var_dump( json_encode($a));//output: string(85) "{"string":"text","jsobj":{"string":"text","jsobj":"text2","bool":false},"bool":false}"
答案 6 :(得分:0)
HTML
<select name="sub" id="subcat" class="form-control" required="required">
</select>
PHP
$this->load->model('MainModel');
$subvalue = $this->MainModel->loadSubData($var);
echo json_encode($subvalue);
//if MVC
// or you can just output your SQLi data to json_encode()
JS
$("#maincat").change(function(){
var status = this.value;
$.ajax({
type: 'POST',
url: 'home/subcat/'+status,
success: function(data){
var option = '';
var obj = JSON.parse(data);
if(obj.length > 0){
for (var i=0;i<obj.length;i++){
option += '<option value="'+ obj[i].id + '">' + obj[i].name + '</option>';
}
//Now populate the second dropdown i.e "Sub Category"
$('#subcat').children("option").remove();
$('#subcat').append(option);
}else{
option = '<option value="">No Sub Category Found</option>';
$('#subcat').children("option").remove();
$('#subcat').append(option);
}
},
error: function(){
alert('failure');
}
});