2016-07-29 1 views
0

시나리오 : glassfish 4.1/jdk1.8.45에서 실행중인 Java 서블릿. 데이터베이스에서 읽은 자바 스크립트 함수가 있으며 javax.script. *를 사용하여 서버 측에서 실행됩니다. 이 함수를 디버깅 할 때 서버 로그에 일부 json 객체를 출력하는 것이 좋습니다. 실제 JSON 대신 [Object object]를 인쇄하고 있습니다. JSON.stringify()를 사용하여 [undefined]를 제공합니다. 이 시나리오에서 json 객체의 실제 내용을 인쇄하는 방법이 있습니까? 감사합니다. .glassfish 서버 로그의 javascript 함수에서 JSON 객체 인쇄

답변

1

JSON.stringify는 자바 스크립트 개체에서만 작동합니다. Java 객체에서는 작동하지 않습니다. JavaScript 객체에서 JSON.stringify를 호출하는지 확인하십시오.

Java 객체에 JSON 문자열을 만들어야하는 경우 Object.bindProperties 확장 (https://wiki.openjdk.java.net/display/Nashorn/Nashorn+extensions#Nashornextensions-Object.bindProperties)을 사용하여 Java 객체의 속성을 스크립트 객체에 바인딩 한 다음 JSON.stringify를 호출 할 수 있습니다.

샘플 (테스트) 코드는 여기 ->http://hg.openjdk.java.net/jdk9/dev/nashorn/file/0de67a63e2c7/test/script/nosecurity/treeapi/utils.js

이 스크립트는 친화적 인 JSON 객체로 Nashorn AST 트리 오브젝트 [자바 객체]를 변환하는 데 사용됩니다.

+0

예, JavaScript가 아닌 java 내에서 stringify를 사용하고 있습니다. JavaScript 함수 내부에서 디버그 문을 인쇄하고 싶습니다. –

+0

스크립트 내부에서 JSON.stringigy를 호출하는 부분이 좋습니다. 제 질문은 JSON.stringify에 전달할 인수에 대한 것입니다! 그것은 Java 객체를 인수 또는 스크립트 객체로 사용합니까? JS 객체에 대해 "undefined"를 얻은 경우 이는 버그처럼 들립니다. 그것이 Java 객체라면, 그것은 설계된 것입니다. –

+0

오케이. 나는 오해했다. 논쟁은 js 객체 다. \t var fullJson = formDataHolder.getFullJson(), \t \t ignoreList = getIgnoreList(); \t \t groupKey =에서는 parseInt (REQ .__ ctrl__groupKey) \t \t itemKey =에서는 parseInt (REQ는 .__ ctrl__itemKey) \t \t validateGroup =에서는 parseInt (REQ는 .__ ctrl__validateGroup) \t \t validateItem =에서는 parseInt (REQ .__ ctrl__validateItem) \t REQ에 \t reviewRequested = '검토', \t \t showReview = 거짓, \t \t returnJson = {}, \t \t vItemCheck = validateGroup + '.'+ 유효 ateItem, \t \t itemCheck = groupKey + '.'+ itemKey; 일부 조작 후 returnJson을 인쇄하려고합니다. 도움 주셔서 감사합니다. –

0

JSON.stringify를 사용하고 싶지만 정의되지 않은 경우 JSON이 정의되지 않았습니까? 아니면 그냥 함수입니까? 그렇다면 Nashorn에 포함되어 있지 않을 수도 있습니다. Polyfill로 추가하려고하면 here 또는 here처럼 보일 수 있습니다.