我是一家使用PeopleSoft HCM9.1的公司的软件工程师。我为我们的Sharepoint和.NET团队编写web服务来使用这些RESTful web服务。我发送给他们的Content-Type是application/json,集成代理执行的序列化非常好。我曾经遇到过一个问题,我们的.NET工程师断言这是非法的;然而,当我访问JSON解析器站点并检查它是否有效时,它说它是合法的。这是问题所在。数据在JSON中出现,但是有一个属性,其第一次出现的数据类型是一个对象。进入的第二行将其更改为列表/数组。我无法更改这一点,因为它是Oracle PeopleSoft实现的已交付序列化的一部分。下面是一个例子-
{"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服务应该像一份合同,这样他就知道应该期待什么数据类型,而不应该像这样改变他。是的,我知道他是从哪里来的,但是有标准化的行业实践吗?如果是,那么文档/证据在哪里?我想从大学的一些计算机科学页面或一些合法的文件,说“这是最佳实践”的网站。
现在我的最后一个问题是,对于开发人员来说,以一种他每次都可以检查它是列表还是对象的方式编写代码真的很难吗?我不这么认为,但这位开发人员上上下下发誓,这是“太多的代码”或“太多的工作”,每次都必须适应这种情况。
你说呢?我希望这是有意义的。我试图尽可能简单和明确地描述这一点。
谢谢!
发布于 2018-11-15 07:40:07
在较新版本的PeopleTools 8.52+中,甲骨文最终修复了JSON的序列化。所以这只是旧版PeopleTools上的一个问题。
发布于 2015-03-13 08:12:32
我们也面临着同样的问题,我个人认为甲骨文在这一点上搞砸了。我看.NET的人是对的,这不是标准用法。
https://stackoverflow.com/questions/28821370
复制相似问题