Я инженер-программист для компании, которая работает с PeopleSoft HCM 9.1. Я пишу веб-службы для нашей команды Sharepoint и .NET для использования этих веб-сервисов RESTful. Переданный ими Content-Type I - это приложение/json, и сериализация, выполняемая посредником интеграции, довольно велика. Есть одна проблема, с которой я столкнулся, и наш инженер .NET ругается вверх и вниз, что это не законно; Однако, когда я перехожу на сайт парсера JSON и проверяю, действительно ли это, это говорит. Вот проблема. Данные попадают в JSON, но есть свойство, тип данных которого для первого вхождения является объектом. Вторая строка, входящая в нее, изменяет ее на список/массив. Я не могу изменить это, потому что это часть поставляемой сериализации, реализованной Oracle PeopleSoft. Вот пример -PeopleSoft JSON Dynamic Property Тип данных
{"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, он говорит, что веб-сервис должен быть похож на контракт, поэтому он знает, какие типы данных ожидать, и он не должен меняться на нем так. Да, я понимаю, откуда он, но существует стандартизированная отраслевая практика? Если да, то где документация/доказательство? Я хочу, чтобы веб-сайт с какой-то страницы компьютерных наук из Университета или какой-то законный документ, в котором говорится: «Это лучшая практика».
Теперь мой последний вопрос, действительно ли разработчику сложно программировать его таким образом, чтобы он мог просто проверить, каждый раз это список или объект? Я не думаю, что это, но этот разработчик ругается вверх и вниз, что это «слишком много кода» или «слишком много работы», чтобы каждый раз приспосабливаться к этому.
Что вы говорите? Я надеюсь в этом есть смысл. Я попытался описать это как можно более простым и ясным.
Спасибо!
Похоже, что я не единственный человек с этими проблемами. Вот кто-то, кто разместил что-то похожее [link] (http://scripting.com/stories/2010/12/18/questionForJsonGurus.html#thisCausesProblemsForPeopleInSomeLanguagesBecauseApparentlyItsHardForThemToDealWithAnObjectWithoutInAdvanceKnowingItsTypeSoTheySayTheSolutionIsSimpleAlwaysMakeItAListSimpleForThemBut) – TSuperman29