Получить элемент typeof внутри объекта JSON - PullRequest
2 голосов
/ 06 апреля 2020

У меня есть JSON файл и с помощью @Supercool удалось получить имена ключей для каждого. Я хотел быть в состоянии получить тип значений.

JSON Структура:

[
    {
        "id": 1536700,
        "title": "final_output",
        "error": "",
        "data": [
            {
                "metric": 4940616.0,
                "title": "d_revenue"
            },
            {
                "metric": 5132162.0,
                "title": "p_revenue"
            },
            {
                "metric": 4954576.0,
                "title": "s_revenue"
            },
            {
                "metric": 4882217.0,
                "title": "u_revenue"
            },
            {
                "metric": 4869609.0,
                "title": "t_revenue"
            },
            {
                "metric": 5075422.0,
                "title": "w_revenue"
            },
            {
                "metric": 4461996.0,
                "title": "v_revenue"
            }
        ]
    }
]

Следующая структура:

[
    {
        "run_id": 1536700,
        "code_title": "select_data",
        "error": "",
        "data": [
            {
                "user_name": "C_51",
                "num1": 51,
                "num2": 101,
                "num3": 151
            },
            {
                "user_name": "H_51",
                "num1": 51,
                "num2": 101,
                "num3": 151
            },
            {
                "user_name": "C_52",
                "num1": 52,
                "num2": 102,
                "num3": 152
            },
            {
                "user_name": "H_52",
                "num1": 52,
                "num2": 102,
                "num3": 152
            },
            {
                "user_name": "C_53",
                "num1": 53,
                "num2": 103,
                "num3": 153
            }
        ]
    }
]

Используйте Object.keys (yourObject) для получения ключей

 $.getJSON(api, function(elem) {
      let keys=elem.map( structure =>  Object.keys(structure.data[0]))         
   });

Запустите следующий фрагмент, чтобы проверить, работает ли он

 let ele= [{"id": 1536700,"title": "final_output","error": "",
"data": [{"metric": 4940616.0,"title": "d_revenue"},{"metric": 5132162.0,"title": "p_revenue"},{"metric":4954576.0,"title": "s_revenue"},{"metric": 4882217.0,"title":"u_revenue"},{"metric": 4869609.0,"title":"t_revenue"},{"metric": 5075422.0,"title": "w_revenue"},{"metric": 4461996.0,"title": "v_revenue"}
]
},
{"run_id": 1536700,"code_title": "select_data","error": "",
  "data": [{"user_name": "C_51","num1": 51,"num2": 101,"num3": 151},{"user_name": "H_51","num1": 51,"num2": 101, "num3": 151},{"user_name": "C_52","num1": 52,"num2": 102,"num3": 152},{"user_name": "H_52","num1": 52,"num2": 102,"num3":152},{"user_name": "C_53","num1": 53,"num2": 103,"num3": 153}
]}]
 console.log(ele.map( structure =>  Object.keys(structure.data[0])))
 console.log(ele.map( structure =>  Object.values(structure.data[0])))
.as-console-wrapper { max-height: 100% !important; top: 0; }

Я хочу иметь возможность получить тип каждого из значений. Могу ли я получить это для значений, перечисленных выше?

[
  [
    number,
    string
  ],
  [
    string,
    number,
    number,
    number
  ]
]

Ответы [ 3 ]

1 голос
/ 06 апреля 2020

Выполните map() через Object.values ​​(obj) и используйте значение typeof для возврата типа

let ele= [{"id": 1536700,"title": "final_output","error": "",
"data": [{"metric": 4940616.0,"title": "d_revenue"},{"metric": 5132162.0,"title": "p_revenue"},{"metric":4954576.0,"title": "s_revenue"},{"metric": 4882217.0,"title":"u_revenue"},{"metric": 4869609.0,"title":"t_revenue"},{"metric": 5075422.0,"title": "w_revenue"},{"metric": 4461996.0,"title": "v_revenue"}
]
},
{"run_id": 1536700,"code_title": "select_data","error": "",
  "data": [{"user_name": "C_51","num1": 51,"num2": 101,"num3": 151},{"user_name": "H_51","num1": 51,"num2": 101, "num3": 151},{"user_name": "C_52","num1": 52,"num2": 102,"num3": 152},{"user_name": "H_52","num1": 52,"num2": 102,"num3":152},{"user_name": "C_53","num1": 53,"num2": 103,"num3": 153}
]}]
console.log("Keys are ..");
 console.log(ele.map( structure =>  Object.keys(structure.data[0])))
console.log("and their correspondent value types are ..."); 
 console.log(ele.map( structure =>  Object.values(structure.data[0]).map(value => typeof value)))
.as-console-wrapper { max-height: 100% !important; top: 0; }
1 голос
/ 06 апреля 2020

let ele = [{"id": 1536700,"title": "final_output","error": "", "data": [{"metric": 4940616.0,"title": "d_revenue"},{"metric": 5132162.0,"title": "p_revenue"},{"metric":4954576.0,"title": "s_revenue"},{"metric": 4882217.0,"title":"u_revenue"},{"metric": 4869609.0,"title":"t_revenue"},{"metric": 5075422.0,"title": "w_revenue"},{"metric": 4461996.0,"title": "v_revenue"}]}, {"run_id": 1536700,"code_title": "select_data","error": "", "data": [{"user_name": "C_51","num1": 51,"num2": 101,"num3": 151},{"user_name": "H_51","num1": 51,"num2": 101, "num3": 151},{"user_name": "C_52","num1": 52,"num2": 102,"num3": 152},{"user_name": "H_52","num1": 52,"num2": 102,"num3":152},{"user_name": "C_53","num1": 53,"num2": 103,"num3": 153}]}];

console.log(ele.map(structure => Object.values(structure.data[0]).map(v => typeof v)));
0 голосов
/ 06 апреля 2020

Javascript является языком-прототипом, поэтому вы можете использовать свойство constructor.name в любой структуре в js, чтобы увидеть, какой это тип.

простой пример:

const a = { t: 5, s: '', d: false, e:[], f:{}, d:5.53 };
for (let k in a) {
  console.log(k,a[k].constructor.name);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...