как сказать это строка является stringify'd объект JSON - PullRequest
5 голосов
/ 21 ноября 2011

Для всех, кто заинтересовался, я создал здесь скрипт "localalstorage with expirations", http://plugins.jquery.com/project/localcache

Что я делаю: создание расширения для хранилища, чтобы пользователь мог сделать это:

localStorage.setThing(key, value)

и пользователь может сделать следующее:

localStorage.setThing("key1", 1)
localStorage.setThing("key2", "this is a string")
localStorage.setThing("key3", { prop1: "this is a json obj" })

В моем методе setThing я проверяю typeof для значения, а если typeof value == "object", я сохраняю его как localStorage.setItem(key, JSON.stringify(value))

В методе getThing я знаю, что значение, которое превращает его в localStorage, всегда будет строкой. Итак, как я могу это сделать?

var val = localStorage.getItem("key3")
if (val is a previously JSON.stringify'd object) // <-- ??
    return JSON.parse(val)

Нужно ли выполнять проверку регулярных выражений для val, и если да, есть ли у кого-нибудь удобный шаблон, который сообщает мне, действительно ли строка является объектом JSON.stringify?

Спасибо!

Ответы [ 3 ]

3 голосов
/ 21 ноября 2011

Обычный способ определить, является ли строка JSON, - это запустить ее через JSON-декодер. Если это удастся, это JSON :-) Здесь нет необходимости в регулярном выражении.

2 голосов
/ 21 ноября 2011

Другой вариант - сохранить объект {isJsonObj:true, jsonObj: jsonObj} и проверить, что типом является Object, а isJsonObj - true.Если любой из них ложен, то это не объект json (это означает, что вам не нужно анализировать).Я понимаю, что это означает, что у вас не всегда будет строка, но это облегчает тестирование и не требует больших затрат.

2 голосов
/ 21 ноября 2011

Какая скорость вам нужна при этом?Если это не большая проблема, вы всегда можете просто попытаться выполнить синтаксический анализ / декодирование val, а если это не удастся, то это не объект JSON.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...