JSON数据,列出值和使用对象

时间:2014-02-08 20:23:58

标签: jquery json

更新的代码:

http://jsfiddle.net/rfKcM/25/

由于一些很好的帮助,查询现在显示在选择菜单中。现在我只需要帮助弄清楚如何“使用”与.hospital中所选HosName相对应的对象。例如:我如何实现:

$( '有希望的。')HTML(SPval);

其中SPval是一个JSON值,对应于.hospital中的HosName选择。

来自我原来的帖子:

正如您所看到的,我有一组JSON数据,它们只列出了三个不同状态的多家医院。此外,每家医院在JSON文件中也有一组相关的数据值。目前,用户从选择菜单中选择状态,并且列出了处于相同状态的相应医院,但是我需要列出处于所选状态的所有医院,而不仅仅是一个。

此外,列出的医院需要列为链接,以便用户可以选择要在应用程序中使用的医院,并且所有相关值也可以在以后用作对象。

以下是工作流程摘要:

  1. 用户在下拉列表中选择一个州并按下提交按钮
  2. 按下提交按钮会运行搜索JSON数据的函数,并查找与上一步中选择的状态值匹配的所有条目
  3. 与所选状态匹配的所有HosName值都列为链接
  4. 用户从列表中选择一个HosName,并将与所选HosName相关的所有JSON值带入应用程序以供以后使用。例如:如果用户从医院名称列表中选择“YORK HOSPITAL”,则还将从JSON数据中检索相关字符串(SPval,Hospitalval,ICUval,SMval,OPval,AVLOSval),并将其作为具有应用程序的对象提供以后的计算。
  5. 新代码:

    <div>
        <select name="state">
            <option value="" selected="selected">Select a State</option>
            <option value="LA">Louisiana</option>
            <option value="TX">Texas</option>
            <option value="WI">Wisconsin</option>
        </select>
    </div>
    <select class="hospital"></select>
    <p class="hopeful"></p>
    
    var SPval;
    var json = {
            "hospitals": {
    
        };
        $(function () {
            $("select[name='state']").change(function () {
                var searchName = $("select[name='state']").val();
                var matches = $.grep(json.hospitals.facility, function (v) {
                    return v.State == searchName;
                })
                var name = $.map(matches, function (v) {
                        return  "<option data-data='" + JSON.stringify( v )+ "'>" + v.HosName + "</option>"
                }).join("")
                $('.hospital').html(name);
                $('.hopeful').html(SPval);
            });
        });
    

2 个答案:

答案 0 :(得分:1)

你的方法是正确的,但缺少一件事。

$.each(json.hospitals.facility, function(i, v) {
        if (v.State == searchName) {
            name = v.HosName;
            return;
        }
    });

在每次迭代中,如果州名称等于searchName ,则该值将分配给name,在下一次迭代时, name`将再次被覆盖,直到循环存在。因此,名称变量总是具有最后一个,因此它只显示一个匹配。

所以创建一个像

这样的全局数组
var name = [];

然后在迭代中将每个值推送到它,如

name.push(v.HosName);

JSFiddle

答案 1 :(得分:1)

每当匹配时返回第一个值,而是将所有匹配的值添加到数组中,最后附加到div

这是正确的代码:

$("input[type='submit']").click(function() {
    var searchName = $("select[name='state']").val();
    $('.hospital').html('<ul>')
    $.each(json.hospitals.facility, function(i, v) {
        if (v.State == searchName) {
            $('.hospital').append('<li>'+v.HosName+'</li>');
        }
    });
     $('.hospital').append('</ul>');
    });

DEMO