HTTP 요청을 제출할 때 JSON 종료되지 않은 문자열 오류여보세요,
적절한 JSON 필드와 함께 HTTP 요청을 제출하여 데이터 추출을 요청할 수있는 온라인 애플리케이션이 있습니다.
내 JSON 페이로드 내의 하나의 필드 (field2)는 목록 유형이며 하나 이상의 항목을 포함 할 수 있습니다. 내가 직면하고있는 문제는 JMP 스크립트 가이 목록에 단일 항목이 있고 두 개 이상이 아닌 경우에만 작동한다는 것입니다.
내가받는 오류는 다음과 같습니다
"error":"com.google.gson.stream.MalformedJsonException: Unterminated string
내가 혼동하는 것은 Python의 요청 라이브러리를 사용하여 동일한 JSON 페이로드로 동일한 HTTP 요청을하면 요청없이 문제가 발생한다는 것입니다.
요청을 보내기 전에 JMP가 JSON을 형식화하는 방법과 관련이있는 것 같습니다.
어떤 아이디어?
아래는 참조 용으로 작성된 간단한 코드 버전입니다.
url = "http://www.example_url.com/request";
my_username = "username";
timeout_minutes = 2;
var_field1 = "\!"value1\!"";<BR />
<FONT color="#FF0000"><STRONG><FONT color="#339966">var_field2 = "\!"value2a\!""; //works<BR /><BR /></FONT>//var_field2 = "\!"value2a\!", \!"value2b\!""; //does not work<BR /></STRONG></FONT>
var_field3 = "\!"value3\!"";
payloadJSON = "{\!"test\!":{\!"field1\!":" || var_field1 || ",\!"field2\!":[" || var_field2 || "],\!"field3\!":[" || var_field3 || "]}}";
request = New HTTP Request(
URL( url ),
Method( "POST" ),
Timeout(timeout_minutes*60),
Headers
(
{
"header_field1": "header_value1",
"header_field2": "header_value2"
}
),
Username(my_username),
JSON(payloadJSON)
);
data = request << Send();</CODE></P><P><CODE class=" language-jsl">
Re : HTTP 요청을 제출할 때 JSON 종료되지 않은 문자열 오류value1, value2a, value2b, value3에서 사용중인 값을 모르면 문제가 무엇인지 명확하게 말할 수 없습니다. JSON의 일부 문자는 이스케이프해야합니다 (예 : \ n, \ t, ", '등).
가능하면 다음을 사용할 수 있습니다.
Write(payloadJSON || "\!n");
payloadJSON의 모든 값을 연결하고 Chrome의 JSON 편집기 온라인 플러그인과 같은 JSON 파서에 복사 / 붙여 넣기하여 유효한 JSON이 생성되는지 확인하십시오.
매우 간단한 JSON이 아닌 한 일반적으로 JSL 연관 배열을 사용하고 AsJSONExpr을 사용하여 JSON을 형성합니다. 그것은 나를 위해 탈출합니다. (JSON 메시지도 연관 배열을 사용합니다)
귀하의 경우 (작동하지 않는) 모든 인용이 JSON에 대해 처리되도록하기 위해 이렇게 작성했습니다
var_field1 = "\!"value1\!"";
var_field2 = {"\!"value2a\!", \!"value2b\!""};
var_field3 = "\!"value3\!"";
fields = [=>];
fields["field1"] = var_field1;
fields["field2"] = var_field2;
fields["field3"] = var_field3;
payloadJSON = [=>];
payloadJSON["test"] = fields;
payloadJSON = asJSONExpr(payloadJSON);
Write(payloadJSON || "\!n");