Я пытаюсь получить данные с Android на Laravel с помощью API. Ниже приведены данные, которые я получил в списке массивов объектов формата.
$obj = '{ "registerDetails": "{"accountName":"hh h hc","accountNumber":"868686","addressUser":"cg h jc","bankId":1,"selectedCityId":1,"emergencyName":"g g h","emergencyNumber":"0686868","education":[{"certificatePicture":{"body":{},"headers":{"namesAndValues":["Content-Disposition","form-data; name\u003d\"certificateFile\"; filename\u003d\"2022-11-30-00-56-28-598.jpeg\""]}},"grade":"hxycucu","educationLvl":"STPM / A Level or Equivalent","endEducation":"Dec 2022","id":4,"institutionName":"yxyxyxy","isEducationExpandable":false,"startEducation":"Nov 2022"}],"skill":[{"id":8},{"id":10}],"work":[{"companyName":"cuvuv","jobEndDate":"Nov 2022","isCurrentlyWorkHere":true,"isJobExpand":true,"jobPosition":"g cuc","jobScope":"cuccu","jobTitle":"6ff7f","jobStartDate":"Oct 2022"}],"phoneUser":"906886","postCode":"058686","selectedStateId":1}", "myKadFile": {}, "selfieFile": {} }';
Я уже пытался расшифровать объект, но он вернул NULL
.
Вот что я пробовал:
var_dump(json_decode($obj, true));
также это $foo = utf8_encode($obj); $array = json_decode($foo, true);
Даже этот ответ не делает строку json, содержащую юникод, действительной.
Восстановление json методом проб и ошибок методом грубой силы во всей красе:
Проблема связана с этими надоедливыми символами юникода =
(\u003d
).
Мне нужно было заменить их и обработать косые черты.
...In case I need to clarify for anyone...
Код: (Демо)
$fixed = preg_replace('/\\\\u003d\\\\\\\\(.*?)\\\\\\\/', '=\\\\\\\\\\\\$1\\\\\\\\\\\\', $obj);
var_export(
json_decode(json_decode($fixed)->registerDetails)
);
Вывод:
(object) array(
'accountName' => 'gsyau',
'accountNumber' => '168454',
'addressUser' => 'test',
'bankId' => 1,
'selectedCityId' => 1,
'emergencyName' => 'test',
'emergencyNumber' => '0146542346',
'education' =>
array (
0 =>
(object) array(
'certificatePicture' =>
(object) array(
'body' =>
(object) array(
),
'headers' =>
(object) array(
'namesAndValues' =>
array (
0 => 'Content-Disposition',
1 => 'form-data; name = "certificateFile"; filename = "2022-11-29-21-18-35-294.jpg"',
),
),
),
'grade' => 'test',
'educationLvl' => 'Doctoral (PHD) or Equivalent',
'endEducation' => 'Oct 2022',
'id' => 8,
'institutionName' => 'test',
'isEducationExpandable' => false,
'startEducation' => 'Aug 2022',
),
),
'skill' =>
array (
0 =>
(object) array(
'id' => 7,
),
1 =>
(object) array(
'id' => 9,
),
),
'work' =>
array (
0 =>
(object) array(
'companyName' => 'test',
'jobEndDate' => 'Oct 2022',
'isCurrentlyWorkHere' => false,
'isJobExpand' => false,
'jobPosition' => 'testtest',
'jobScope' => 'test',
'jobTitle' => 'test',
'jobStartDate' => 'Aug 2022',
),
),
'phoneUser' => '014654264',
'postCode' => '68100',
'selectedStateId' => 1,
)
отлично, большое спасибо! Кстати, как получить доступ к значению «certificateFile» в разделе «Образование» -> «CertificatePicture»? Я установил значение true для json_decode(json_decode($fixed)->registerDetails, true); затем зацикливает образование, чтобы получить значение «certificateFile», но я понятия не имею
Я бы проанализировал эти данные с помощью регулярного выражения или форматированного сканирования. 3v4l.org/NGRMb
Я также пробую это..
json_decode(str_replace ('\"','"', $obj), true);
все еще возвращает NULL