2011-11-21 2 views
4

입니다, 나는문자열이 누군가를 위해 관심있는 stringify'd JSON 객체

http://plugins.jquery.com/project/localcache 내가 뭘하는지, 여기에 "만료와 로컬 스토리지"스크립트를를 구축 결국 사용자가이 할 수 있도록 저장 :

localStorage.setThing(key, value) 

을 사용자가 다음을 수행 할 수 있습니다 내 setThing의 메타에서

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

od, 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) 

내가 발에 정규식 체크를 할 필요가 있는가, 그렇다면, 사람이 문자열 정말 JSON.stringify'd 객체 인 경우 나에게 말한다 편리 패턴이 있습니까?

감사합니다.

+0

EAFP를 사용해보십시오 - 용서를 구하는 것보다 용서를 구하는 것이 더 쉽습니다) - * 패턴 * [Grace Hopper], http://en.wikipedia.org/wiki/Python_syntax_and_semantics#Exceptions을 참조하십시오. – miku

+0

예가 있습니까? –

답변

2

또 다른 옵션은 객체 {isJsonObj:true, jsonObj: jsonObj}을 저장하고 유형이 Object인지 확인하고 isJsonObj가 true입니다. 이들 중 하나가 거짓이면 json obj가 아닙니다 (파싱 할 필요가 없음을 의미). 나는 이것이 당신이 항상 문자열을 가지고있는 것은 아니라는 것을 의미한다는 것을 알지만, 테스트하기 쉽고 많은 양의 오버 헤드를 가지지 않을 것입니다.

+0

을해야 할 수도 있습니다 이것이 내가 한 일입니다. 감사! –

1

이렇게 할 때 어떤 종류의 속도가 필요합니까? 큰 문제는 아니지만 항상 val을 파싱/디코딩 할 수 있으며 실패 할 경우 JSON 객체가 아닙니다.

+0

시도하면 {var x = JSON.parse ("3"); }, 오류는 발생하지 않습니다. 그래서, 나는 항상 문자열을 파싱하려고 할 것이므로, 정규식 접근을해야 할 수도 있습니다. 다른 생각? 감사! –

2

문자열이 JSON인지 여부를 확인하는 일반적인 방법은 JSON 디코더를 통해이를 실행하는 것입니다. 그것이 성공하면 그것은 JSON입니다 :-) 여기에 정규식이 필요 없습니다.

+0

어떻게해야합니까? –

+0

''JSON.parse (val)''을 직접 실행하십시오. if 문은 필요 없습니다. 구문 분석에 실패하면 * val *은 유효한 JSON이 아닙니다. –

+0

죄송합니다. 저는이 기능을 처음 사용합니다 :) 그렇다면 어떻게 실패하는지 확인하나요? –