我非常希望你能帮助我,因为我花了太多时间在这上面。首先,遗憾的是我的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'
上述仅在未提供阵列标题时才有效(例如&#39;歌曲名称#1由艺术家名称#1(主要信息)&#39; =&gt;阵列(成为只需数组(。
对于那些好奇的人,使用以下方法将文件转换为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只是$内容,并添加了额外的标题。有关我专门运行的PHP,请参阅Searching JSON array for values and accessing surrounding keys/values; output as JSON。
提前谢谢你。
答案 0 :(得分:0)
你有阵列。使用以下代码(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。
答案 1 :(得分:0)
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"
}
};
虽然以这种方式安排它可能会更好(这里是fiddle来证明:
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搜索歌曲列表,或者迭代以过滤特定的字段值。例如,查找标题以&#34;歌曲标题&#34;:
开头的所有歌曲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);