Javascript check json object

Как проверить, является ли объект JavaScript JSON

У меня есть вложенный объект JSON, который мне нужно перебрать, и значение каждого ключа может быть строкой, массивом JSON или другим объектом JSON. В зависимости от типа объекта мне нужно выполнять разные операции. Есть ли способ проверить тип объекта, чтобы узнать, является ли он строкой, объектом JSON или массивом JSON?

Я попытался использовать typeof и instanceof но оба не работали, как typeof вернет объект как для объекта JSON, так и для массива, и instanceof выдает ошибку, когда я делаю obj instanceof JSON .

Чтобы быть более конкретным, после синтаксического анализа JSON в объект JS можно ли каким-либо образом проверить, является ли это обычной строкой или объектом с ключами и значениями (из объекта JSON) или массивом (из массива JSON). )?

var jsonObj = JSON.parse(data); var path = ["hi","hello"]; function check(jsonObj, path) < var parent = jsonObj; for (var i = 0; i < path.length-1; i++) < var key = path[i]; if (parent != undefined) < parent = parentJavascript check json object; >> if (parent != undefined) < var endLength = path.length - 1; var child = parent[path[endLength]]; //if child is a string, add some text //if child is an object, edit the key/value //if child is an array, add a new element //if child does not exist, add a new key/value >> 

Как выполнить проверку объекта, как показано выше?

Читайте также:  Jtextfield java только цифры

JSON это просто нотация, хранящаяся как string. Вы уверены, что не путаете термины? — zerkms

Нет, я обновил вопрос, чтобы сделать его более ясным. Думаю, мой главный вопрос в том, что происходит после того, как мы .parse() в строке JSON и как ее идентифицировать? — Wei Hao

изменение не сделало это более ясным (по крайней мере, для меня). Что, если вы приведете пример JSON, с которым имеете дело — zerkms

Обновленный вопрос с примером. (: — Wei Hao

Реальный вопрос: зачем вам это? — Asherah

18 ответы

Я бы проверил атрибут конструктора.

var stringConstructor = "test".constructor; var arrayConstructor = [].constructor; var objectConstructor = (<>).constructor; function whatIsIt(object) < if (object === null) < return "null"; >if (object === undefined) < return "undefined"; >if (object.constructor === stringConstructor) < return "String"; >if (object.constructor === arrayConstructor) < return "Array"; >if (object.constructor === objectConstructor) < return "Object"; > < return "don't know"; >> var testSubjects = ["string", [1,2,3], , 4]; for (var i=0, len = testSubjects.length; i

Изменить: добавлена ​​нулевая проверка и неопределенная проверка.

@Pereira: у JavaScript есть некоторые запутанные морщины. Попробуйте экземпляр строки «surely_this_is_a_string». — Программист

<>.constructor заставляет меня получить ERROR TypeError: Cannot read property ‘constructor’ of undefined в моем угловом приложении. — Шашлык случая

Столько if утверждения. Используйте switch ! — Нано

Вы можете использовать Массив.isArray для проверки массивов. потом тип объекта == ‘строка’, и тип объекта == ‘объект’.

var s = 'a string', a = [], o = <>, i = 5; function getType(p) < if (Array.isArray(p)) return 'array'; else if (typeof p == 'string') return 'string'; else if (p != null && typeof p == 'object') return 'object'; else return 'other'; >console.log("'s' is " + getType(s)); console.log("'a' is " + getType(a)); console.log("'o' is " + getType(o)); console.log("'i' is " + getType(i)); 

‘s’ это строка
«а» — это массив
‘о’ является объектом
‘я’ это другое

Не забывайте учитывать, что typeof null === ‘object’ — обнимаю

[ < "name":[ ] >] это также допустимо json, но его возвращаемый массив вашим кодом. Проверь это — играть на скрипке — Судхир К. Гупта

Объект JSON is объект. Чтобы проверить, является ли тип типом объекта, оцените свойство конструктора.

То же самое относится ко всем другим типам:

function isArray(obj) < return obj !== undefined && obj !== null && obj.constructor == Array; >function isBoolean(obj) < return obj !== undefined && obj !== null && obj.constructor == Boolean; >function isFunction(obj) < return obj !== undefined && obj !== null && obj.constructor == Function; >function isNumber(obj) < return obj !== undefined && obj !== null && obj.constructor == Number; >function isString(obj) < return obj !== undefined && obj !== null && obj.constructor == String; >function isInstanced(obj) < if(obj === undefined || obj === null) < return false; >if(isArray(obj)) < return false; >if(isBoolean(obj)) < return false; >if(isFunction(obj)) < return false; >if(isNumber(obj)) < return false; >if(isObject(obj)) < return false; >if(isString(obj)) < return false; >return true; > 

Ресурс в кодировке JSON не является объектом. Это строка. Только после того, как вы его расшифруете или в Javascript JSON.parse() ресурс JSON становится объектом. Поэтому, если вы проверяете ресурс, поступающий с сервера, чтобы убедиться, что это JSON, лучше сначала проверить строку, а затем, если это не а затем после разбора, если это объект. — Хмерман6006

Если вы пытаетесь проверить тип object после того, как вы проанализируете JSON string, я предлагаю проверить атрибут конструктора:

obj.constructor == Array || obj.constructor == String || obj.constructor == Object 

Это будет гораздо более быстрая проверка, чем typeof или instanceof.

Если Библиотека JSON не возвращает объекты, созданные с помощью этих функций, я бы с большим подозрением отнесся к этому.

Гораздо более прямой подход. Спасибо! = Д — Эдуардо Лучио

Предпочтительный ответ. Откуда вы получаете информацию о преимуществах производительности? — Дэниел Ф

@DanielF это было общепринятым мнением еще в 12 году, сейчас все по-другому, поэтому я не знаю, верно ли это — ДжошРагем

Вы можете создать свой собственный конструктор для разбора JSON:

var JSONObj = function(obj) < $.extend(this, JSON.parse(obj)); >var test = new JSONObj(''); //

Затем проверьте instanceof, чтобы убедиться, что он изначально нуждался в разборе.

Ответ @PeterWilkinson у меня не сработал, потому что конструктор для «типизированного» объекта настроен на имя этого объекта. мне пришлось работать с тип

Я написал модуль npm для решения этой проблемы. Это доступно здесь:

object-types : модуль для определения того, какие литеральные типы лежат в основе объектов

Установить

 npm install --save object-types 

Применение

const objectTypes = require('object-types'); objectTypes(<>); //=> 'object' objectTypes([]); //=> 'array' objectTypes(new Object(true)); //=> 'boolean' 

Посмотрите, это должно решить вашу точную проблему. Дайте знать, если у вас появятся вопросы! https://github.com/dawsonbotsford/object-types

вы также можете попытаться проанализировать данные, а затем проверить, есть ли у вас объект:

 var testIfJson = JSON.parse(data); if (typeOf testIfJson == "object") < //Json >else < //Not Json >

ответ дан 01 мар ’21, в 10:03

Почему бы не проверить Number — немного короче и работает в IE/Chrome/FF/node.js

function whatIsIt(object) < if (object === null) < return "null"; >else if (object === undefined) < return "undefined"; >if (object.constructor.name) < return object.constructor.name; >else < // last chance 4 IE: "\nfunction Number() \n" / node.js: "function String() < [native code] >" var name = object.constructor.toString().split(' '); if (name && name.length > 1) < name = name[1]; return name.substr(0, name.indexOf('(')); >else < // unreachable now(?) return "don't know"; >> > var testSubjects = ["string", [1,2,3], , 4]; // Test all options console.log(whatIsIt(null)); console.log(whatIsIt()); for (var i=0, len = testSubjects.length; i

Я комбинирую оператор typeof с проверкой атрибута конструктора (от Питера):

var typeOf = function(object) < var firstShot = typeof object; if (firstShot !== 'object') < return firstShot; >else if (object.constructor === [].constructor) < return 'array'; >else if (object.constructor === <>.constructor) < return 'object'; >else if (object === null) < return 'null'; >else < return 'don\'t know'; >> // Test var testSubjects = [true, false, 1, 2.3, 'string', [4,5,6], , null, undefined]; console.log(['typeOf()', 'input parameter'].join('\t')) console.log(new Array(28).join('-')); testSubjects.map(function(testSubject)< console.log([typeOf(testSubject), JSON.stringify(testSubject)].join('\t\t')); >); 
typeOf() input parameter --------------------------- boolean true boolean false number 1 number 2.3 string "string" array [4,5,6] object null null undefined 

Я знаю, что это очень старый вопрос с хорошими ответами. Впрочем, кажется, что еще можно добавить к нему свои 2 цента.

Предполагая, что вы пытаетесь протестировать не сам объект JSON, а строку, отформатированную как JSON (что, по-видимому, имеет место в вашем var data ), вы можете использовать следующую функцию, которая возвращает логическое значение (является или не является «JSON»):

function isJsonString( jsonString ) < // This function below ('printError') can be used to print details about the error, if any. // Please, refer to the original article (see the end of this post) // for more details. I suppressed details to keep the code clean. // let printError = function(error, explicit) < console.log(`[$] $: $`); > try < JSON.parse( jsonString ); return true; // It's a valid JSON format >catch (e) < return false; // It's not a valid JSON format >> 

Вот несколько примеров использования функции выше:

console.log('\n1 -----------------'); let j = "abc"; console.log( j, isJsonString(j) ); console.log('\n2 -----------------'); j = ``; console.log( j, isJsonString(j) ); console.log('\n3 -----------------'); j = ''; console.log( j, isJsonString(j) ); console.log('\n4 -----------------'); j = '<>'; console.log( j, isJsonString(j) ); console.log('\n5 -----------------'); j = '[<>]'; console.log( j, isJsonString(j) ); console.log('\n6 -----------------'); j = '[<>,]'; console.log( j, isJsonString(j) ); console.log('\n7 -----------------'); j = '[, ]'; console.log( j, isJsonString(j) ); 

Когда вы запустите приведенный выше код, вы получите следующие результаты:

1 ----------------- abc false 2 ----------------- true 3 ----------------- false 4 ----------------- <> true 5 ----------------- [<>] true 6 ----------------- [<>,] false 7 ----------------- [, ] true 

Пожалуйста, попробуйте фрагмент ниже и дайте нам знать, если это работает для вас. 🙂

ВАЖНО: функция, представленная в этом посте, была адаптирована из https://airbrake.io/blog/javascript-error-handling/syntaxerror-json-parse-bad-parsing где вы можете найти больше интересных подробностей о функции JSON.parse().

function isJsonString( jsonString ) < let printError = function(error, explicit) < console.log(`[$] $: $`); > try < JSON.parse( jsonString ); return true; // It's a valid JSON format >catch (e) < return false; // It's not a valid JSON format >> console.log('\n1 -----------------'); let j = "abc"; console.log( j, isJsonString(j) ); console.log('\n2 -----------------'); j = ``; console.log( j, isJsonString(j) ); console.log('\n3 -----------------'); j = ''; console.log( j, isJsonString(j) ); console.log('\n4 -----------------'); j = '<>'; console.log( j, isJsonString(j) ); console.log('\n5 -----------------'); j = '[<>]'; console.log( j, isJsonString(j) ); console.log('\n6 -----------------'); j = '[<>,]'; console.log( j, isJsonString(j) ); console.log('\n7 -----------------'); j = '[, ]'; console.log( j, isJsonString(j) );

Источник

How to check if the object type is JSON in javascript

It is a short tutorial about how to check an object in JSON in javascript and typescript.

JSON is simple data with keys and values enclosed in parentheses.

JSON objects don’t have type representation in javascript, They treat as normal strings.

Sometimes, We might think and need to answer the below questions for

  • Check whether a string is a valid json object or not
  • Find an Object in json format
  • String variable is json parsable or not

How to check object variable is JSON in javascript

  • Javascript has a JSON class that has a parse method to convert a string into an object.
  • Enclose the parse method in the try and catch block
  • It throws an error if JSON is not parsable

Here is a function to check string is valid JSOn or not Returns true for valid JSON object, false for invalid JSON data

function isJsonObject(strData)  try  JSON.parse(strData); > catch (e)  return false; > return true; > let jsondata = ''; let notjsondata = "username-admin"; console.log(isJsonObject(jsondata)); // returns true console.log(isJsonObject(notjsondata)); // returns false

Check object type using the npm library

There are many npm libraries to check native object types.

We are going to write an example for the kindOf npm library.

First, install using the npm command.

npm install kind-of --save-dev

Here is a simple program to check types of data

var kindOf = require("kind-of"); console.log(kindOf(12312)); // returns number console.log(kindOf("test")); // returns string console.log(kindOf(false)); // returns boolean kindOf( username: "admin" >); // object

Summary

To Sump up, Learned variable type is JSON object or not using

Источник

How to check if the object type is JSON in javascript

It is a short tutorial about how to check an object in JSON in javascript and typescript.

JSON is simple data with keys and values enclosed in parentheses.

JSON objects don’t have type representation in javascript, They treat as normal strings.

Sometimes, We might think and need to answer the below questions for

  • Check whether a string is a valid json object or not
  • Find an Object in json format
  • String variable is json parsable or not

How to check object variable is JSON in javascript

  • Javascript has a JSON class that has a parse method to convert a string into an object.
  • Enclose the parse method in the try and catch block
  • It throws an error if JSON is not parsable

Here is a function to check string is valid JSOn or not Returns true for valid JSON object, false for invalid JSON data

function isJsonObject(strData)  try  JSON.parse(strData); > catch (e)  return false; > return true; > let jsondata = ''; let notjsondata = "username-admin"; console.log(isJsonObject(jsondata)); // returns true console.log(isJsonObject(notjsondata)); // returns false

Check object type using the npm library

There are many npm libraries to check native object types.

We are going to write an example for the kindOf npm library.

First, install using the npm command.

npm install kind-of --save-dev

Here is a simple program to check types of data

var kindOf = require("kind-of"); console.log(kindOf(12312)); // returns number console.log(kindOf("test")); // returns string console.log(kindOf(false)); // returns boolean kindOf( username: "admin" >); // object

Summary

To Sump up, Learned variable type is JSON object or not using

Источник

Оцените статью