JSON поиск по ключу

corptoday

Client
Регистрация
16.10.2016
Сообщения
90
Благодарностей
7
Баллы
8
Добрый день.
Подскажите пожалуйста как найти walletId по ключу walletName в JSON

walletName = Reserve

JavaScript:
{"walletList":[{"order":2,"walletId":1357397,"accountNo":23286001357397,"walletName":"Main","balance":0.00,"balanceConverted":0,"balanceNet":0.00,"balanceAvailable":0.00,"balanceAvailableCashable":0.00,"firstFinancialTransactionDate":"2023-10-13","lastFinancialTransactionDate":"2023-10-30","balanceInLocalCurrency":null,"isDefaultWallet":true,"isAssignedToCard":true,"walletExtPreciousMetalList":null},{"order":8,"walletId":1361243,"accountNo":23301001361243,"walletName":"Reserve","balance":5759.07,"balanceConverted":0,"balanceNet":5759.07,"balanceAvailable":5759.07,"balanceAvailableCashable":5759.07,"firstFinancialTransactionDate":"2023-10-28","lastFinancialTransactionDate":"2023-10-30","balanceInLocalCurrency":null,"isDefaultWallet":false,"isAssignedToCard":false,"walletExtPreciousMetalList":null},{"order":9,"walletId":1361855,"accountNo":23303001361855,"walletName":"WalletIGti6","balance":100.00,"balanceConverted":0,"balanceNet":100.00,"balanceAvailable":100.00,"balanceAvailableCashable":100.00,"firstFinancialTransactionDate":"2023-10-30","lastFinancialTransactionDate":"2023-10-30","balanceInLocalCurrency":null,"isDefaultWallet":false,"isAssignedToCard":true,"walletExtPreciousMetalList":null}]}
На PHP это было вот так

PHP:
foreach ($json['walletList'] as $item) {
    if ($item['walletName'] == $d['accname']) {
                        
        $walletId = $item['walletId'];
                        
    }
}
 

Sherminator

Client
Регистрация
10.09.2021
Сообщения
1 253
Благодарностей
678
Баллы
113
Добрый день.
Подскажите пожалуйста как найти walletId по ключу walletName в JSON

walletName = Reserve

JavaScript:
{"walletList":[{"order":2,"walletId":1357397,"accountNo":23286001357397,"walletName":"Main","balance":0.00,"balanceConverted":0,"balanceNet":0.00,"balanceAvailable":0.00,"balanceAvailableCashable":0.00,"firstFinancialTransactionDate":"2023-10-13","lastFinancialTransactionDate":"2023-10-30","balanceInLocalCurrency":null,"isDefaultWallet":true,"isAssignedToCard":true,"walletExtPreciousMetalList":null},{"order":8,"walletId":1361243,"accountNo":23301001361243,"walletName":"Reserve","balance":5759.07,"balanceConverted":0,"balanceNet":5759.07,"balanceAvailable":5759.07,"balanceAvailableCashable":5759.07,"firstFinancialTransactionDate":"2023-10-28","lastFinancialTransactionDate":"2023-10-30","balanceInLocalCurrency":null,"isDefaultWallet":false,"isAssignedToCard":false,"walletExtPreciousMetalList":null},{"order":9,"walletId":1361855,"accountNo":23303001361855,"walletName":"WalletIGti6","balance":100.00,"balanceConverted":0,"balanceNet":100.00,"balanceAvailable":100.00,"balanceAvailableCashable":100.00,"firstFinancialTransactionDate":"2023-10-30","lastFinancialTransactionDate":"2023-10-30","balanceInLocalCurrency":null,"isDefaultWallet":false,"isAssignedToCard":true,"walletExtPreciousMetalList":null}]}
На PHP это было вот так

PHP:
foreach ($json['walletList'] as $item) {
    if ($item['walletName'] == $d['accname']) {
                     
        $walletId = $item['walletId'];
                     
    }
}
Ну на шарпе на json так напасть с наскоку нельзя, во первых сначала надо создать класс для json, в вашем случае это будет так

C#:
 public class Root
    {
        public List<WalletList> walletList { get; set; }
    }

    public class WalletList
    {
        public int order { get; set; }
        public int walletId { get; set; }
        public object accountNo { get; set; }
        public string walletName { get; set; }
        public double balance { get; set; }
        public int balanceConverted { get; set; }
        public double balanceNet { get; set; }
        public double balanceAvailable { get; set; }
        public double balanceAvailableCashable { get; set; }
        public string firstFinancialTransactionDate { get; set; }
        public string lastFinancialTransactionDate { get; set; }
        public object balanceInLocalCurrency { get; set; }
        public bool isDefaultWallet { get; set; }
        public bool isAssignedToCard { get; set; }
        public object walletExtPreciousMetalList { get; set; }
    }
А потом уже делать десериализацию перебирать коллекцию и обращаться к свойствам
C#:
Root myDeserializedClass = JsonConvert.DeserializeObject<Root>("Ваш JSON файл");

foreach (var item in myDeserializedClass.walletList)
{
 project.SendInfoToLog(walletList.walletId.ToString());
 project.SendInfoToLog(walletList.walletName.ToString());
}
 

Moonwalker

Client
Регистрация
16.03.2016
Сообщения
1 630
Благодарностей
1 225
Баллы
113
Решение тупое (точнее, не самое "правильное"), но буквально пару недель назад надо было подобную задачу решить. Лень было массив JSON весь обрабатывать в цикле, решил тупо:
1. В список все куски (в твоем случае - все, что между {"order": и })
2. Поиск строки, в которой есть нужное значение (в твоем случае - "walletName":"Нужный вариант",)
3. В этой строке взятие нужного значения.

Да, сам знаю, что не самое правильное, но у меня работает стабильно и потратил пару минут )))

зы. Я вообще люблю искать самые простые с точки зрения реализации, пусть и не самые очевидные с точки зрения "логики" решения )) Как говорится, всегда можно зайти сбоку. Но тут, да, главное, чтобы работало правильно. У меня работает, так что, все норм ))
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
C#:
var j_object = Global.ZennoLab.Json.Linq.JObject.Parse(project.Variables["Variable0"].Value);

return j_object.SelectToken("$.walletList[?(@.walletName=='Reserve')].walletId");
будет работать только если есть всего 1 элемент с таким условием
 
  • Спасибо
Реакции: Hannes и Moonwalker

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
C#:
var j_object = Global.ZennoLab.Json.Linq.JObject.Parse(project.Variables["Variable0"].Value);

return j_object["walletList"]
    .Where(wallet => wallet["walletName"].ToString() == "Reserve")
    .First()["walletId"];
а это уже ближе к пхп варианту
 
  • Спасибо
Реакции: Hannes

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)