Failsafe JSON 구문 분석JSON 페이로드가있는 문자열 열이 있습니다. 이것이 파트너가 자동화 된 컴퓨터의 메시지를 저장하는 방식입니다. 문제는 데이터베이스에서 JSON이 아닌 메시지를 가져 오는 경우가 있으므로 :유효 탑재량 열에는 JSON으로 간단히 파싱 할 수없는 행이 있습니다.
Try 블록을 사용하여 구문 분석 함수를 래핑했지만 JSON을 준수하지 않는 문자열이 포함 된 각 행에 경고가 표시됩니다. 때때로 JMP14가 완전히 충돌하는 경우도 있습니다. 오류는 무시할 수 있지만 강력한 코드 작성 방법이 아닙니다.
Local(
{ parsed = [=> ""] },
Try( parsed = Parse JSON( :payload ) );
parsed;
);이것은 그렇게 나쁘게 실패합니다. 행에서 :유효 탑재량 JSON 문자열이 아닌 비어 있으면 "."을 반환합니다. 몇 가지 이유. 나는 그 점이 어디서 왔는지 전혀 모른다.
오류가있는 방식으로 JSON 구문 분석 함수를 사용하는 방법이 있습니까? 어떤 도움을 주셔서 감사합니다.
노트 :
다음은 JSON의 종류에 대한 몇 가지 예입니다. JSON은 올바르게 처리됩니다.
{ "assetId": "AthensPaintLineMotor4",
"dataItemId": "온도 1",
"dateTime": "2018-02-22T19 : 44 : 41",
"value": "91.51"}
{ "assetId": "OKUMA-Genos-2", "dateTime": "2018-04-30T11 : 59 : 13", "dataItemId": "Lp1block", "dataItemName": "p1block", "value" 없는"}
@{ "assetId": "OKUMA-Genos-2", "dateTime": "2018-04-30T11 : 59 : 13", "dataItemId": "Lp1MacManPanelHistory", "dataItemName": "p1MacManPanelHistory", "value" 2018/04/30 07:58:12 @Change Window : [26026] "}
재 : Failsafe JSON 구문 분석배치 인터랙티브 솔루션 사용해보기 @vince_faller 논의 된 이리 . (과 @Eric_Hill 댓글.)
Scriptscriptscriptscript;
Batch Interactive(1);
DatabaseCall;
Batch Interactive(0);
MoreScriptScriptScript
재 : Failsafe JSON 구문 분석이것이 14.1에서 바뀔 것이라는 소식을 듣고 기쁩니다. 이러한 변화로 나는 끝없이 "경고 팝업"을 얻습니다. 데이터 테이블이 수백만 또는 행으로 길기 때문에 확인을 클릭하면 JMP14가 충돌하는 경우가 있습니다. 데이터에는 특별한 것이 없습니다. 사실 나는 작은 테이블을 다른 테이블로 서브 셋팅했고 동일한 경고가 발생하는 동안 JMP는 문제를 해결합니다. 
어쨌든,이 간단한 해결 방법을 찾으려고합니다. 비표준 JSON은 예측 가능한 형태로 제공됩니다. 만약 내가 할 수만 있다면 -이 조건들이 잘 작동 할거야.
도와 줘서 고마워!
재 : Failsafe JSON 구문 분석이 중 일부는 향후 14.1 유지 보수에서 수정됩니다. JMP를 충돌하고 공유 할 수있는 데이터가 있으면 도움이됩니다. 다음은 현재 해결 방법입니다.
payload = "\[
{
]\"; // malformed JSON
Try(
txt = Log Capture( result = Parse JSON( payload ) );
If( Length( txt ),
Throw( txt ) // error message
);
result; // parsed JSON
,
Show( exception_msg );
"?" // returned value for malformed JSON
);
이 방법은 LogCapture 기능을 사용하여 JSON 구문 분석 함수로 반환하고 오류로 던졌습니다. 그만큼 보여 주다 (...)는 선택 사항입니다. 예외 _ 문자 는 throw 된 값을 가진 특수 변수입니다. 던짐 (txt) JMP에 의해 다른 오류가 발생했습니다.
"?" [=>] 또는 너에게 합리적인 다른 값으로 대체 될 수 있습니다.
페이로드 문자열에서 원시 문자열 따옴표 "\ [and] \"를 사용 했으므로 테스트 데이터에서 따옴표를 이스케이프 처리 할 필요가 없습니다. 이미 데이터 테이블에있는 데이터에는 필요하지 않습니다.