Php javascript/jquery通过名称和索引访问JSON数组
我非常希望你能帮我做这件事,因为我在这件事上花了太多时间。首先,不幸的是,我的JSON格式不是非常可变的,我已经将其移动到许多不同的格式,以支持一些jquery和基于php的搜索。每次我移动它,搜索就会工作,站点的其余部分就会中断,反之亦然 可以通过名称和索引号访问JSON数组吗?这是我的JSON(存储在PHP文件中,正在被检索并成功转换为有效的JSON): 仅当未提供数组标题时(例如,'Song Name#1 by Artister Name#1(maininfo)=>array(变为简单的数组() 对于那些好奇的人来说,文件正在使用以下方式转换为JSON:Php javascript/jquery通过名称和索引访问JSON数组,php,jquery,arrays,json,Php,Jquery,Arrays,Json,我非常希望你能帮我做这件事,因为我在这件事上花了太多时间。首先,不幸的是,我的JSON格式不是非常可变的,我已经将其移动到许多不同的格式,以支持一些jquery和基于php的搜索。每次我移动它,搜索就会工作,站点的其余部分就会中断,反之亦然 可以通过名称和索引号访问JSON数组吗?这是我的JSON(存储在PHP文件中,正在被检索并成功转换为有效的JSON): 仅当未提供数组标题时(例如,'Song Name#1 by Artister Name#1(maininfo)=>array(变为简单的数
var jsonobj;
$.ajax({
url: 'getjson.php',
dataType: "json",
success: function (doc) {
jsonobj = doc;
}
});
$final = array($final_contents);
header('Content-type: application/json');
echo json_encode($final);
在PHP端,当调用getjson.PHP时,将加载JSON数组(如上),并使用以下命令将其转换为有效的JSON:
var jsonobj;
$.ajax({
url: 'getjson.php',
dataType: "json",
success: function (doc) {
jsonobj = doc;
}
});
$final = array($final_contents);
header('Content-type: application/json');
echo json_encode($final);
注意:$final_contents只是$contents,添加了一个额外的头。请参阅我专门运行的PHP
提前感谢。您拥有了数组。请使用以下代码()和echo将其转换为json,以便jquery可以接收它:
$jsonVar = json_encode($contents);
echo $jsonVar;
更新:
使用以下代码调用json:
或者,您可以使用速记:
$.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。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在歌曲列表中搜索,或通过迭代筛选特定字段值。例如,要查找标题以“Song Title”开头的所有歌曲,请执行以下操作:
如果您使用的是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。请检查并让我知道您建议的答案是否仍然可行。谢谢。@KurtW更新的答案指出了jquery端的正确引用。您共享的代码是使用JSON作为回调,而不是转换为JSON。@KurtW我建议您尝试发送JSON字符串而不是php数组正如我所建议的,我想知道它是否适合您。它正在按原样工作。对不起,我更新了我发布的内容,以反映我使用的是$.ajax({而不是$.json({--我在发布时有点困惑,应该已经复制和粘贴了。我要转换为json的数据必须保留在PHP中--我无法更改它。但它正在工作--例如parse(jsonobj[0][1] ['sname'])返回“Song Name”很好。我的挑战是PHP需要调用一个命名数组,JS需要通过索引来调用它。我仍然不清楚如何继续。希望您能提供帮助——提前谢谢。成功后,您能否粘贴用于将$content传递给jquery回调的代码?@AshutoshNigam-我相信我刚刚将其添加到了origi中nal post。基本上,ajax json调用正在加载一个名为getjson.php的文件,该文件获取我在php中拥有的json样式数组,并将其转换为有效的json。请参阅我昨天为一篇带有不同挑战的帖子添加的链接——它包含php。感谢Steve在这里花费的时间。我担心php方面会不能使用此方法。调用它的php如下所示:include('sample_data.php');--示例数据包括我上面展示的数据。您上面提供的JSON布局都是针对JS的,在PHP中不是有效的语法。抱歉,这并不困难,但理解起来有困难。更新了我的帖子,以明确我需要在PHP中存储JSON数组。PHP脚本将其拉入,然后使用$final=array($final_contents);header('Content-type:application/json');echo json_encode($final);---这就是最终实现JSON格式的方式。当调用getjson.php时,php文件将返回有效的JSON。非常感谢@Steve K--我现在一切就绪!非常感谢您的时间和努力。感谢所有提交答案的人--我的ajax加载或调用最终不是问题,我只是简单地做到了我不知道我不能用JS命名数组。使用Steve的建议和修改PHP的组合(感谢另一个SO用户!),我让它工作了!
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"
$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",
)
);
$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_encode($songs);