2012-07-12 2 views
1

이의 내가 있다고 가정 해 봅시다 SerializeJSON 결과에서 몇 가지 큰 따옴표를 제거 :라일로는

<cfscript> 
arrButtons = [ 
    { 
     "name" = "Add", 
     "bclass" = "add", 
     "onpress" = "addItem" 
    }, 
    { 
     "name" = "Edit", 
     "bclass" = "edit", 
     "onpress" = "editItem" 
    }, 
    { 
     "name" = "Delete", 
     "bclass" = "delete", 
     "onpress" = "deleteItem" 
    } 
]; 

jsButtons = SerializeJSON(arrButtons); 
// result : 
// [{"onpress":"addItem","name":"Add","bclass":"add"},{"onpress":"editItem","name":"Edit","bclass":"edit"},{"onpress":"deleteItem","name":"Delete","bclass":"delete"}] 
</cfscript> 

모든 onpress 항목에 대해 내가 (onPress에 값을해야 JS 라이브러리 요구 사항에 맞게 값에서 큰 따옴표를 제거 할 필요가 콜백 함수).

정규 표현식을 사용하여 큰 따옴표를 제거하려면 어떻게합니까?

최종 결과는 여야합니다 : addItem를, editItem의 deleteItem 주변

[{"onpress":addItem,"name":"Add","bclass":"add"},{"onpress":editItem,"name":"Edit","bclass":"edit"},{"onpress":deleteItem,"name":"Delete","bclass":"delete"}] 

없음 따옴표.

수정 2012-07-13 왜 내가 이것을 필요로합니까? 결과가 많은 파일에서 사용될 JS 컬렉션 인 CFML 함수를 만들었습니다. jsButton 객체는 JS 라이브러리에서 사용할 수있는 옵션의 일부로 사용됩니다. 이 함수의 인수 중 하나는 struct 배열 (기본값은 arrButtons)이며 제공된 인수 값은 기본값과 병합 할 수 있습니다.

우리가 (CFML)에 따옴표없이 값 onPress에 을 쓸 수 없습니다, 그래서 그 값에 따옴표를 추가, 단지 문자열 인 (JSON에 구조체의 (CFML) 배열을 변환해야하기 때문에) JS 라이브러리 옵션에 배치하기 전에 큰 따옴표를 제거하십시오.

Railo와 함께 구조체를 링크 된 구조체로 선언하여 루프 또는 변환에 대해 동일한 순서 키가 있는지 확인할 수 있습니다. 위의 예제에서 언론은 항상 구조체의 최신 키입니다. 이 링크 된 구조체와 같은 키 순서를 사용하면 간단한 Replace 함수로 큰 따옴표를 제거 할 수 있지만 CFML 함수를 사용하는 모든 프로그래머가 위의 예와 같은 링크 된 구조체와 키 순서를 사용하는 것을 잊지는 않습니다

+0

당신은 값을 읽고 대응 콜백을 제공해야합니다. 정규 표현식은 전혀 관련이 없습니다. – nhahtdh

답변

1

을 트릭을해야 할 필요가 - 당신은 JS 콜백 상대하고 어디에 어떻게 /에 따라서는 문자열 기능을 사용 할 수 있습니다 따옴표를 제거하지 않고 함수를 참조하는 이름 (즉, object[button.onpress]). 우리가 다루고있는 보장하기 위해 lookbehind -

(?<="onpress":) :

jsButtons = jsButtons.replaceAll('(?<="onpress":)"([^"]+)"','$1'); 


정규식 두 부분이 구성됩니다

그러나, 당신이 질문 때문에, 여기에 정규식 솔루션입니다 텍스트 "onpress":
"([^"]+)" - 따옴표와 일치하고 그 내용을 캡처하십시오.

대체면의 $1은 일치하는 텍스트 (즉 전체 인용 된 값)를 첫 번째 캡처 그룹 (즉, 따옴표의 내용)으로 바꿉니다.

"onpress"의 대소 문자 구분이 문제가 될 수있는 경우 대소 문자를 무시하기 위해 (?i)이라는 정규식에 접두사를 붙일 수 있습니다.

이 (그냥 "onPress에"하지 않음) 여러 다른 이벤트가 될 것입니다 당신이되고 위의 식의 관련 부분을 업데이트 할 수 있습니다 (?<="on(?:press|hover|squeek)":)


참고 :은 위의 모든 형식에 의존 serializeJson의 출력이 변경되지 않습니다. - 주석, 공백, 작은 따옴표 또는 다른 것이있을 수있는 경우 나중에 더 긴식이 필요합니다. 정규 표현식이 필요한 경우 조사해야하는 이유 중 일부입니다. 우선이 문제를 해결하십시오.

0

이 경우에는 serialize()를 간단히 사용할 수 있습니다. 그게 내가이 실제로 잘 모르겠어요 ...

거트

1

출력하고자하는 것은 JSON이 아니므로 SerializeJSON을 사용하는 것은 어렵습니다.

Javascript를 직접 작성하는 대신 ColdFusion Array에 먼저 넣을 이유가 있습니까?

JSON은 순수하게 데이터 기술 언어를 의미합니다. http://www.json.org 당 "가벼운 데이터 교환 형식"입니다. - 프로그래밍 언어 아님.

http://en.wikipedia.org/wiki/JSON 당, 을 지원하는 "기본 유형"은 다음과 같습니다

  • 번호 (정수, 실수, 또는 부동 소수점)
  • 문자열 (따옴표 백 슬래시 탈출 유니 코드)
  • 부울 (true 및 false)
  • 배열 (값의 정렬 된 시퀀스, 쉼표로 구분되고 대괄호로 묶여 있음)
  • Object (키 : 값 쌍의 모음) MMA로 구분하고 중괄호
  • null

-Source