2015-03-02 105 views
2

我是一名與PeopleSoft HCM 9.1一起工作的公司的軟件工程師。我爲我們的Sharepoint和.NET團隊編寫Web服務以使用這些RESTful Web服務。我發送的內容類型是application/json,集成代理所做的序列化非常好。我遇到了一個問題,我們的.NET工程師發誓說它不合法,但是,當我訪問JSON解析器網站並檢查它是否有效時,它就是這樣。這是問題。數據以JSON形式出現,但有一個屬性,其首次出現的數據類型是一個對象。進入的第二行將其更改爲列表/數組。我無法改變這一點,因爲它是Oracle PeopleSoft實施的交付序列化的一部分。下面是示例 -PeopleSoft JSON動態屬性數據類型

{"C_DATA": 
[{ 
     "HRS_PERSON_ID": 120483, 
     "HRS_PROFILE_SEQ": 17, 
     "HRS_JOB_OPENING_ID": 125075, 
     "HRS_QSTN_ID": 1354, 
     "HRS_JO_RQMT_SEQ": 1, 
     "HRS_QSTN_ORDER_NBR": 4, 
     "HRS_OPN_ENDED_QSTN": "Y", 
     "HRS_DELETE_REQ": "", 
     "HRS_REF_NUM_LONG": "", 
     "HRS_RATING": "", 
     "HRS_RANKING": 0, 
     "HRS_ANSWER_ID": 0, 
     "HRS_OPEN_ENDED_ANS": "", 
     "C_ONLINE_SCREEN": "N", 
     "DESCRLONG": "What is the phone number of your emergency contact?", 
     "C_HRS_APP_QSTA":   { 
      "HRS_JOB_OPENING_ID": 125075, 
      "HRS_JO_RQMT_SEQ": 0, 
      "HRS_QSTN_ID": 1354, 
      "HRS_ANSWER_ID": 0, 
      "CORRECT_ANSWER": "", 
      "HRS_POINTS": 0, 
      "DESCR254": "", 
      "ORDER_SEQ": 0 
     } 
     }, 
      { 
     "HRS_PERSON_ID": 120483, 
     "HRS_PROFILE_SEQ": 17, 
     "HRS_JOB_OPENING_ID": 125075, 
     "HRS_QSTN_ID": 1355, 
     "HRS_JO_RQMT_SEQ": 1, 
     "HRS_QSTN_ORDER_NBR": 5, 
     "HRS_OPN_ENDED_QSTN": "N", 
     "HRS_DELETE_REQ": "", 
     "HRS_REF_NUM_LONG": "", 
     "HRS_RATING": "", 
     "HRS_RANKING": 0, 
     "HRS_ANSWER_ID": 0, 
     "HRS_OPEN_ENDED_ANS": "", 
     "C_ONLINE_SCREEN": "N", 
     "DESCRLONG": "Have you ever been arrested?", 
     "C_HRS_APP_QSTA":   [ 
         { 
       "HRS_JOB_OPENING_ID": 125075, 
       "HRS_JO_RQMT_SEQ": 1, 
       "HRS_QSTN_ID": 1355, 
       "HRS_ANSWER_ID": 1000, 
       "CORRECT_ANSWER": "N", 
       "HRS_POINTS": 0, 
       "DESCR254": "Yes", 
       "ORDER_SEQ": 1 
      }, 
         { 
       "HRS_JOB_OPENING_ID": 125075, 
       "HRS_JO_RQMT_SEQ": 1, 
       "HRS_QSTN_ID": 1355, 
       "HRS_ANSWER_ID": 1001, 
       "CORRECT_ANSWER": "Y", 
       "HRS_POINTS": 0, 
       "DESCR254": "No", 
       "ORDER_SEQ": 2 
      } 
     ] 
     } 
] 
} 

通知的C_HRS_APP_QSTA屬性如何是第一對象(與{}),在它的一個列表/陣列(其具有方括號[])第二次運行。

首先,這是合法的嗎?根據JSON解析器,這是完全合法的。 (檢查它在這裏:http://jsonformatter.curiousconcept.com/

二,這是最佳實踐?根據這位.NET開發人員,他說Web服務應該像合同一樣,所以他知道需要什麼樣的數據類型,並且不應該像這樣改變他。是的,我知道他來自哪裏,但是有沒有標準化的行業慣例?如果是這樣,文件/證明在哪裏?我想要一個來自大學計算機科學頁面的網站或一些說「這是最佳實踐」的合法文檔。

現在我的最後一個問題是,開發人員是否真的很難以一種方式對代碼進行編碼,以便每次檢查它是否是列表或對象?我不認爲這是事實,但是這位開發人員發誓,這是「太多的代碼」或「太多的工作」,不得不每次都適應這一點。

你說什麼?我希望這是有道理的。我試圖儘可能簡單明確地描述這一點。

謝謝!

+1

看起來我並不是唯一有此問題的人。這裏有人發佈了類似的東西[http://scripting.com/stories/2010/12/18/questionForJsonGurus.html#thisCausesProblemsForPeopleInSomeLanguagesBeeauseApparentlyItsHardForThemToDealWithAnObjectWithoutInAdvanceKnowingItsTypeSoTheySayTheSolution IsSimpleAlwaysMakeItAListSimpleForThemBut] – TSuperman29 2015-03-03 17:53:54

回答

0

我們也面臨同樣的問題,我個人認爲甲骨文已經搞砸了。恕我直言,.NET的人是正確的,這不是標準的使用。