我非常希望你能帮我,因为我在这方面花了太多时间。首先,不幸的是,我的JSON格式不是很可变,我已经将其转换为许多不同的格式,以支持一些jquery和基于php的搜索。每次我移动它,搜索就会工作,网站的其他部分就会中断,反之亦然。
是否可以通过名称和索引号访问JSON数组?这是我的JSON(存储在PHP文件中,并被成功检索和转换为有效的JSON):
<?php
$contents = array(
'Song Name #1 by Artist Name #1 (maininfo)' => array(
'contentid' => '1',
'aname' => 'Artist Name',
'sname' => 'Song Name',
'main' => 'core content #1',
'maininfo' => 'url')
),
'Song Name #2 by Artist Name #2 (maininfo)' => array(
'contentid' => '2',
'aname' => 'Artist Name',
'sname' => 'Song Name',
'main' => 'core content #2',
'maininfo' => 'url')
);
?>
当数组标题中的某个内容匹配时,我的搜索就会工作,否则它不会返回匹配项,所以我必须保持数组标题不变。
我项目的另一部分使用jquery,并具有以下内容:
parse(jsonobj[0][1]['sname']) //successfully already returning 'Song Name'
以上仅适用于未提供数组标题的情况(例如"歌手名称#1的歌曲名称#1(maininfo)"=>数组(变为简单的数组(
对于那些好奇的人来说,文件正在使用转换为JSON
var jsonobj;
$.ajax({
url: 'getjson.php',
dataType: "json",
success: function (doc) {
jsonobj = doc;
}
});
在PHP方面,当调用getjson.PHP时,会加载JSON数组(如上),并使用将其转换为有效的JSON
$final = array($final_contents);
header('Content-type: application/json');
echo json_encode($final);
注意:$final_contents只是添加了额外标头的$contents。请参阅搜索JSON数组中的值和访问周围的键/值;输出为JSON,用于我专门运行的PHP。
提前谢谢。
JavaScript不支持带有命名索引的数组。您应该将其编码为JSON对象。
var $contents = {
"Song Name #1 by Artist Name #1 (maininfo)": {
"contentid": 1,
"aname": "Artist Name",
"sname": "Song Name",
"main": "core content #1",
"maininfo": "url"
},{
"Song Name #2 by Artist Name #2 (maininfo)": {
"contentid": 2,
"aname": "Artist Name",
"sname": "Song Name",
"main": "core content #2",
"maininfo": "url"
}
};
尽管这样安排可能会更好(这里有一个小提琴来演示:
var songs = [
{
"contentid": 1,
"artist": "Artist Name",
"title": "Song Title 1",
"main": "core content #1",
"maininfo": "url"
},
{
"contentid": 2,
"artist": "Artist Name",
"title": "Song Title 2",
"main": "core content #2",
"maininfo": "url"
}
];
然后,您可以按id搜索歌曲列表,或者迭代以筛选特定的字段值。例如,查找标题以"歌曲标题"开头的所有歌曲:
var findAllSongs = function(prop, value){
var result = new Array();
for (var i = 0; i < songs.length; i++) {
var song = songs[i];
if (song[prop] && (song[prop] === value || song[prop].search(value) >= 0)){
result.push(song);
}
}
return result;
};
var song = findAllSongs("title","Song Title 2")[0];
alert(song.contentid);
// Outputs "2"
我上面json的php等价物是:
$songs = array(
array(
"contentid" => 1,
"artist" => "Artist Name",
"title" => "Song Title 1",
"main" => "core content #1",
"maininfo" => "url",
),
array(
"contentid" => 2,
"artist" => "Artist Name",
"title" => "Song Title 2",
"main" => "core content #2",
"maininfo" => "url",
)
);
如果你使用的是PHP 5.4或更高版本,你可以使用简短的语法:
$songs = [
[
"contentid" => 1,
"artist" => "Artist Name",
"title" => "Song Title 1",
"main" => "core content #1",
"maininfo" => "url",
],[
"contentid" => 2,
"artist" => "Artist Name",
"title" => "Song Title 2",
"main" => "core content #2",
"maininfo" => "url",
]
];
然后,您可以使用当前的方法将其转换为JSON:
json_encode($songs);
您有一个数组。使用以下代码(json_encode)和echo将其转换为json,以便jquery可以接收它:
$jsonVar = json_encode($contents);
echo $jsonVar;
更新:
使用ajax调用json的代码是:
$.ajax({
dataType: "json",
url: url,
data: data,
success: success
});
或者,您可以使用缩写:
$.getJSON( "ajax/test.json", function( data ) {
var items = [];
$.each( data, function( key, val ) {
items.push( "<li id='" + key + "'>" + val + "</li>" );
});
$( "<ul/>", {
"class": "my-new-list",
html: items.join( "" )
}).appendTo( "body" );
});
当然,发送的文件应该是json格式,即:
{
"one": "Singular sensation",
"two": "Beady little eyes",
"three": "Little birds pitch by my doorstep"
}
为此,您需要将数组转换为json。