简体   繁体   English

如何从JSON列表中获取特定数据

[英]How to get specific data from a list of JSON

I have this JSON 我有这个JSON

{
  "doctors": [
    {
      "id": 8,
      "schedules": [
        {
          "id": 8,
          "totime": "11:17",
          "dayId": 2,
          "location": "Somajiguda",
          "fromtime": "10:17",
          "hospitalId": 5,
          "day": "Tuesday",
          "hospital": "Yashoda"
        }
      ],
      "username": "d1",
      "degree": "DA(Anaesthesia)",
      "email": "1@2.com",
      "imagePath": "",
      "department": "Bio-Chemistry",
      "name": "d1",
      "userid": 51,
      "gender": "Male",
      "mobile": "1234567900"
    },
    {
      "id": 10,
      "schedules": [
        {
          "id": 10,
          "totime": "12:35",
          "dayId": 2,
          "location": "Somajiguda",
          "fromtime": "11:35",
          "hospitalId": 5,
          "day": "Tuesday",
          "hospital": "Yashoda"
        }
      ],
      "username": "d3",
      "degree": "BDS",
      "email": "d3@d3.com",
      "imagePath": "",
      "department": "Bio-Chemistry",
      "name": "d3",
      "userid": 56,
      "gender": "Male",
      "mobile": "1234567890"
    },
    {
      "id": 1,
      "schedules": [
        {
          "id": 1,
          "totime": "12:55",
          "dayId": 1,
          "location": "Somajiguda",
          "fromtime": "11:55",
          "hospitalId": 5,
          "day": "Monday",
          "hospital": "Yashoda"
        }
      ],
      "username": "doctor",
      "degree": "BDS",
      "email": "",
      "imagePath": null,
      "department": "Critical Care",
      "name": "doctor",
      "userid": 4,
      "gender": "Male",
      "mobile": "1234567890"
    },
    {
      "id": 7,
      "schedules": [
        {
          "id": 7,
          "totime": "11:17",
          "dayId": 2,
          "location": "Somajiguda",
          "fromtime": "11:17",
          "hospitalId": 5,
          "day": "Tuesday",
          "hospital": "Yashoda"
        }
      ],
      "username": "donald",
      "degree": "DA(Anaesthesia)",
      "email": "donald@doctor.com",
      "imagePath": "",
      "department": "Bio-Chemistry",
      "name": "donald",
      "userid": 47,
      "gender": "Male",
      "mobile": "1234567989"
    },
    {
      "id": 6,
      "schedules": [
        {
          "id": 6,
          "totime": "11:15",
          "dayId": 1,
          "location": "Somajiguda",
          "fromtime": "11:15",
          "hospitalId": 5,
          "day": "Monday",
          "hospital": "Yashoda"
        }
      ],
      "username": "john",
      "degree": "BDS",
      "email": "john@john.com",
      "imagePath": null,
      "department": "Anesthesiology",
      "name": "john",
      "userid": 46,
      "gender": "Male",
      "mobile": "1234567890"
    },
    {
      "id": 5,
      "schedules": [
        {
          "id": 5,
          "totime": "13:11",
          "dayId": 2,
          "location": "Somajiguda",
          "fromtime": "12:11",
          "hospitalId": 5,
          "day": "Tuesday",
          "hospital": "Yashoda"
        }
      ],
      "username": "sknayak",
      "degree": "BDS",
      "email": "sknayak@sknayak.com",
      "imagePath": "",
      "department": "Anesthesiology",
      "name": "sknayak",
      "userid": 38,
      "gender": "Male",
      "mobile": "1234567890"
    },
    {
      "id": 2,
      "schedules": [
        {
          "id": 2,
          "totime": "16:26",
          "dayId": 6,
          "location": "Somajiguda",
          "fromtime": "15:26",
          "hospitalId": 5,
          "day": "Saturday",
          "hospital": "Yashoda"
        }
      ],
      "username": "drsukant",
      "degree": "BDS",
      "email": "",
      "imagePath": null,
      "department": "Anesthesiology",
      "name": "sukant",
      "userid": 9,
      "gender": "Male",
      "mobile": "1234567890"
    }
  ]
}

In this JSON there is a field id which is unique.I am getting this json via an ajax like this 在这个JSON中有一个唯一的字段ID。我通过一个像这样的ajax获取这个json

var test=$.ajax({  
    type: "GET", 
    url: projectUrl+"getDoctors",  
    dataType:"json",
    jsonp: true,
    async:false 
}).responseText;
console.log(test);

As you can see in the JSON there is a field id.For example for id=8 username is d1,id=10,username is d3.I am storing the id in session.So for example if id is 8 then I want only those details(username d1,email 1@2.com.....) whose id is 8. 正如您在JSON中看到的那样,有一个字段id。例如id = 8 username是d1,id = 10,username是d3。我将id存储在会话中。例如,如果id是8,那么我只想要ID为8的那些详细信息(用户名d1,电子邮件1@2.com .....)。

So how to filter the JSON to a specific value. 那么如何将JSON过滤为特定值。

You can create a computed for a specific item: 您可以为特定项目创建一个计算式

self.doctors = ko.observableArray();
self.d3Doctor = ko.computed(function() {
    return ko.utils.arrayFirst(self.doctors(), function(obj) {
        return obj.id === 8;
    });
});

Now you only have to worry about populating the doctors observableArray: 现在,您只需要担心填充doctors observableArray即可:

$.getJSON(projectUrl+"getDoctors", function(response) {
    ko.utils.arrayPushAll(yourViewModel.doctors, response.doctors);
});

This allows for the following: 这允许以下内容:

<div data-bind="if: d3Doctor()">
    <h3>Doctor with ID 8</h3>
    <p>Name: <span data-bind="text: d3Doctor().name"></span></p>
    <p>E-mail: <span data-bind="text: d3Doctor().email"></span></p>
    <p>Address: <span data-bind="text: d3Doctor().address"></span></p>
    ...
</div>

You can use each to find it, try this: 您可以使用each来查找它,请尝试以下操作:

$(document).ready(function() {
    $.ajax({
        type: "GET",
        url: projectUrl+"getDoctors",
        dataType: "json",
        jsonp: true,
        async: false
    }).done(function(data) {
        $.each(data.doctors, function(i, v) {
            if (v.id == '8') {
                console.log('found', v.username, v.email);
                return false;
            }
        });
    });
});

May be this?: 可能是这个吗?:

function findById(data, id){
     for(var i=0;i<data.length;i++){
          if(data[i].id === id) return { username:data[i].username, email:data[i].email};
     }
     // Or, you can use $.grep like this:
     // var foundDoctors = $.grep(data,function(e){return e.id === id;})
     // return foundDoctors.length > 0 && foundDoctors[0] || null;

     // Or, you can use filter() method from Array (IE 9+)
}

findById(jsondata["doctors"], 8);

Yes. 是。 I can answer this. 我可以回答。

In my way, I personally prefer to turn all the data into array and itenerate it or manipulate it. 以我的方式,我个人更喜欢将所有数据转换为数组并进行迭代或操作。

As mention in this question , we already push the data into this format: 如本问题所述 ,我们已经将数据推送为以下格式:

doctors.push({id:currPat.id,name:currPat.username});

So, now I can use the array filter function for doctors array: 因此,现在我可以对doctors数组使用数组filter功能:

var result = doctors.filter(function(currentObject) {
    return currentObject.id === 8;
});

console.log(result); // {id: 8, name:d1}

Or you can also use the .map() in JQuery, and just make the function to check the data.id and return the pair you want. 或者,您也可以在JQuery中使用.map() ,只需使该函数检查data.id并返回所需的对即可。

And if you would fight for a nano seconds performance. 而且,如果您要争取nano性能。 I would guess my method is better than .map() 我想我的方法比.map()更好

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM