Как сравнить данные Json с массивом с помощью Shell Script? - PullRequest
0 голосов
/ 05 июля 2018

У меня есть один JSON, например

var bbview ={  
   "tbl_am_api":[  
      {  
         "Modified_User":"user1",
         "Modified_Time":"04-Jul-2018 01:40:05",
         "Line_Number":"SS001",
         "Service_Type":"BB3",
         "Status":"Yes",
         "ID":3144526000014337832,
         "Added_Time":"04-May-2018 11:37:29"
      },
      {  
         "Modified_User":"user2",
         "Modified_Time":"04-Jul-2018 01:40:05",
         "Line_Number":"SS002",
         "Service_Type":"BB2",
         "Status":"Yes",
         "ID":3144526000014337832,
         "Added_Time":"04-May-2018 11:37:29"
      },
      {  
         "Modified_User":"user3",
         "Modified_Time":"04-Jul-2018 01:40:05",
         "Line_Number":"SS004",
         "Service_Type":"BB1",
         "Status":"No",
         "ID":3144526000014337832,
         "Added_Time":"04-May-2018 11:37:29"
      }
   ]
};

Я хочу сравнить эти данные и массив json. Первичный ключ как номер строки.

arrayA = {[{Line_Number : SS001, Service_Type : BB3; Status : Yes}]}

массивA имеет номер строки SS001. Найдите этот номер Line_Number в json и сравните значение Service_Type и значение Status одинаковые или нет. Я хочу написать с Shell Script в файле Bash. Я не опытный в сценарии оболочки. Пожалуйста, помогите мне.

Обновление: Я попытался с помощью следующего кода Bash. Но все равно не получится. Пожалуйста, посоветуйте мне

echo "Download FMS AM API File"
rm -rf tbl_am_api_Report?authtoken=da84d49f334c33b88d30dd2c947a4ff0 && wget -q https://creator.zoho.com/api/json/fixed-management-system/view/tbl_am_api_Report?authtoken=da84d49f334c33b88d30dd2c947a4ff0&scope=creatorapi&zc_ownername=tmlbroadband < /dev/null

cat > tbl_api_Report?authtoken=da84d49f334c33b88d30dd2c947a4ff0 //read json file
for row in $(echo "${apiview}" | jq -r '.[] | @base64'); do
    _jq() {
     echo ${row} | base64 --decode | jq -r ${1}
    }

   echo $(_jq '.name') >> info.txt
done

mail -s "Test email" aa@gmail.com -A info.txt < /dev/null

1 Ответ

0 голосов
/ 05 июля 2018

Значением arrayA не является JSON, поэтому я собираюсь дать вам понять, как извлечь значения Line_Number и Status из arrayA (но см. Ниже). Как только эти значения станут доступны, можно будет действовать, как показано здесь:

#!/bin/bash

bbview='...' # as above

echo "$bbview" |
  jq --arg Line_Number SS001 --arg Status Yes '
    .tbl_am_api
    | map(select(.Line_Number==$Line_Number and .Status==$Status)) '

выход

[
  {
    "Modified_User": "user1",
    "Modified_Time": "04-Jul-2018 01:40:05",
    "Line_Number": "SS001",
    "Service_Type": "BB3",
    "Status": "Yes",
    "ID": 3144526000014338000,
    "Added_Time": "04-May-2018 11:37:29"
  }
]

истина / ложь

При другом прочтении вопроса может иметь значение следующий вариант:

echo "$bbview" |
  jq --arg Line_Number SS001 --arg Status Yes '
    .tbl_am_api
    | map(select(.Line_Number==$Line_Number) | .Status==$Status) '

Arraya

Если вы используете версию bash, которая поддерживает ассоциативные массивы, вы можете определить arrayA как ассоциативный массив, например так:

declare -A arrayA
arrayA=([Line_Number]=SS001 [Service_Type]=BB3 [Status]=Yes)

Затем, чтобы получить значение, связанное с Line_Number, вы должны написать: ${arrayA[Line_Number]}; и т.д.

...