Как пройти через объект JSON в JQuery, чтобы сопоставить строку, а затем вернуть определенное значение?

Совершенно новый для JQuery и проблемы с поиском по объекту JSON и возвращением определенного результата. Это объект, который у меня есть:

"serviceProviderLocationList": [
        {
            "serviceProvider": {
                "value": "NBN"
            },
            "locationList": [
                {
                    "sourceSystemAddressId": null,
                    "serviceProvider": "NBN",
                    "locationId": "LOC000158748472",
                    "address": {
                        "subAddressNumber": "121",
                    },
                }
            ]
        },
        {
            "serviceProvider": {
                "value": "Telstra"
            },
            "locationList": [
                {
                    "sourceSystemAddressId": null,
                    "locationId": "266292692",
                    "address": {
                        "subAddressNumber": null,
                        },
                    },
                },
                {
                    "sourceSystemAddressId": null,
                    "locationId": "427275955",
                    "address": {
                        "subAddressNumber": "LIFT",
                    },
                },
                {
                    "sourceSystemAddressId": null,
                    "locationId": "267743661",
                    "address": {
                        "subAddressNumber": "100",
                    },
                },
                {
                    "sourceSystemAddressId": null,
                    "locationId": "267743660",
                    "address": {
                        "subAddressNumber": "99",
                        },
                    },
                }
            ]
        },
        {
            "serviceProvider": {
                "value": "AAPT"
            },
            "locationList": []
        }
    ]
}

Я пытаюсь найти ту часть объекта, где:

serviceProviderLocationList.ServiceProvider.value == 'Telstra'

Затем выполните поиск в соответствующем LocationList, и если:

this.complexAddress.unit == locationList.address.subAddressNumber

Верните правильный идентификатор местоположения.

Например, если this.complexAddress.unit == '100', он должен вернуть идентификатор местоположения == 267743661.

Или this.complexAddress.unit == 'null', тогда он вернет идентификатор местоположения == 266292692

Это код, который я использую сейчас, чтобы получить объект JSON:

GetTelstraServiceID: функция getTelstraServiceID (событие) { event.preventDefault ();

    var data = {
        'address': this.complexAddress,
        'action': 'get_location_id'
    },

    $.ajax({
        method: "POST",
        url: site_vars.ajaxurl,
        data: data
    })
    .done(function( response ) {



        var data = $.parseJSON( response ),
            locationID = data.serviceProviderLocationList[1].locationList[0].locationId;



        if ( typeof locationID !== 'undefined' ) {
            that.locationID = locationID;

        } else {
            alert('We couldn\'t find this address, sorry');
        }
    });
}

}

Любая помощь будет принята с благодарностью.

Не существует такой вещи, как Объект JSON. Если это JSON, это string. Если это object, это Javascript.

connexo 10.08.2018 16:57

Кроме того, ваш JSON недействителен.

connexo 10.08.2018 17:06

Есть ответ на ваш вопрос? Если да, то почему вы еще не выбрали ответ? Если нет, то почему вы не прокомментировали это соответствующим образом?

connexo 11.08.2018 08:58
Как конвертировать HTML в PDF с помощью jsPDF
Как конвертировать HTML в PDF с помощью jsPDF
В этой статье мы рассмотрим, как конвертировать HTML в PDF с помощью jsPDF. Здесь мы узнаем, как конвертировать HTML в PDF с помощью javascript.
0
3
57
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Используйте Array.prototype.filter(), чтобы найти поставщика и идентификатор местоположения, который вы ищете.

function getLocationId(data, provider, unit) {
  return data.filter(d => d.serviceProvider.value===provider)[0].locationList.filter(d => d.address.subAddressNumber === unit)[0].locationId;
}

const data = JSON.parse(`[{
    "serviceProvider": {
      "value": "NBN"
    },
    "locationList": [{
      "sourceSystemAddressId": null,
      "serviceProvider": "NBN",
      "locationId": "LOC000158748472",
      "address": {
        "subAddressNumber": "121"
      }
    }]
  },
  {
    "serviceProvider": {
      "value": "Telstra"
    },
    "locationList": [{
        "sourceSystemAddressId": null,
        "locationId": "266292692",
        "address": {
          "subAddressNumber": null
        }
      },
      {
        "sourceSystemAddressId": null,
        "locationId": "427275955",
        "address": {
          "subAddressNumber": "LIFT"
        }
      },
      {
        "sourceSystemAddressId": null,
        "locationId": "267743661",
        "address": {
          "subAddressNumber": "100"
        }
      },
      {
        "sourceSystemAddressId": null,
        "locationId": "267743660",
        "address": {
          "subAddressNumber": "99"
        }
      }
    ]
  },
  {
    "serviceProvider": {
      "value": "AAPT"
    },
    "locationList": []
  }
]`)

console.info(getLocationId(data, 'Telstra', null))
console.info(getLocationId(data, 'Telstra', '100'))

Остальная часть вашего примера кода является неполной, поэтому я не смог полностью ответить на ваш вопрос в своем коде.

Спасибо за коннексо! Я поиграю и посмотрю, что у меня получится.

Sanza 11.08.2018 03:43

Я добавил остальные ваши требования. Он в основном использует Array.prototype.filter() дважды.

connexo 11.08.2018 06:27

Другие вопросы по теме