Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php javascript/jquery通过名称和索引访问JSON数组_Php_Jquery_Arrays_Json - Fatal编程技术网

Php javascript/jquery通过名称和索引访问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(变为简单的数

我非常希望你能帮我做这件事,因为我在这件事上花了太多时间。首先,不幸的是,我的JSON格式不是非常可变的,我已经将其移动到许多不同的格式,以支持一些jquery和基于php的搜索。每次我移动它,搜索就会工作,站点的其余部分就会中断,反之亦然

可以通过名称和索引号访问JSON数组吗?这是我的JSON(存储在PHP文件中,正在被检索并成功转换为有效的JSON):

仅当未提供数组标题时(例如,'Song Name#1 by Artister Name#1(maininfo)=>array(变为简单的数组(

对于那些好奇的人来说,文件正在使用以下方式转换为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);
在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);