2016-07-29 59 views
0

場景:運行在glassfish 4.1/jdk1.8.45上的Java servlet。有一個JavaScript函數從數據庫中讀取,並在服務器端使用javax.script。*執行。當試圖調試這個函數時,需要在服務器日誌上輸出一些json對象。它是打印[Object object]而不是實際的JSON。使用JSON.stringify(),它給出[undefined]。 有沒有辦法在這種情況下打印json對象上的實際內容? 謝謝。從glassfish服務器日誌上的javascript函數中打印JSON對象

回答

1

JSON.stringify僅適用於javascript對象。它不適用於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

這個腳本用於在犀牛AST樹對象[Java對象]轉換爲友好的JSON對象。

+0

是的,我在JavaScript中使用stringify而不是java。我希望從JavaScript函數內部打印調試語句。 –

+0

這部分 - 在腳本內調用JSON.stringigy很好。我的問題是關於你傳遞給JSON.stringify的參數!這是一個Java對象作爲參數或腳本對象?如果你有JS對象的「未定義」,這聽起來像一個錯誤。如果它是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:你可以看看herehere