Symfony2 JSON 对象 - 错误未捕获类型错误:无法使用“in”运算符搜索“636”


Symfony2 JSON Object - Error Uncaught TypeError: Cannot use 'in' operator to search for '636'

我正在尝试遍历由Symfony2中的操作返回的JSON数据对象的内容。
无论我使用 $.getJSON 还是 $.ajax 仍然会抛出 dame 错误:"未捕获的类型错误:无法使用 'in' 运算符搜索 '636'"
在 AJAX 请求和返回的数据下方:"

$(document).ready(function () {
$('a.parents ').on('click', function (e) {
e.preventDefault();
var newRow = '<table>'n'
<thead>'n'
<tr>'n'
<th>Nom</th>'n'
<th>Prenom(s)</th>'n''n'
</tr>'n'
</thead>'n'
';
$.getJSON(Routing.generate($(this).attr('data-href'),{id: $(this).attr('data-id')}),
function(data) {
$.each(data.parents, function (i, parent) {
    newRow += '<tr><td>' + parent[i].nom + '</td><td>' + parent[i].prenoms + '</td></tr>';
});
newRow += '</table>';
alert(newRow);
},
'json'); 
});
});
`

操作返回的示例结果:

{"success":true,"parents":"{'u0022nom'u0022:'u0022Dafn''u00e9e'u0022,'u0022prenoms'u0022:'u0022Graham'u0022},{'u0022nom'u0022:'u0022G''u00e9raldine'u0022,'u0022prenoms'u0022:'u0022Phillips'u0022},{'u0022nom'u0022:'u0022H''u00e9l''u00e8na'u0022,'u0022prenoms'u0022:'u0022Hernandez'u0022},{'u0022nom'u0022:'u0022Ma''u00eblla'u0022,'u0022prenoms'u0022:'u0022Perez'u0022},{'u0022nom'u0022:'u0022Illustr''u00e9e'u0022,'u0022prenoms'u0022:'u0022Dixon'u0022},{'u0022nom'u0022:'u0022Ru''u00ec'u0022,'u0022prenoms'u0022:'u0022Griffin'u0022},{'u0022nom'u0022:'u0022Rach''u00e8le'u0022,'u0022prenoms'u0022:'u0022Kennedy'u0022},{'u0022nom'u0022:'u0022B''u00e9n''u00e9dicte'u0022,'u0022prenoms'u0022:'u0022Ferguson'u0022},{'u0022nom'u0022:'u0022Gis''u00e8le'u0022,'u0022prenoms'u0022:'u0022Myers'u0022},{'u0022nom'u0022:'u0022Laur''u00e9lie'u0022,'u0022prenoms'u0022:'u0022Mason'u0022},{'u0022nom'u0022:'u0022Y''u00e9nora'u0022,'u0022prenoms'u0022:'u0022Olson'u0022},{'u0022nom'u0022:'u0022L''u00e9onie'u0022,'u0022prenoms'u0022:'u0022Burns'u0022},{'u0022nom'u0022:'u0022Bj''u00f6rn'u0022,'u0022prenoms'u0022:'u0022Vasquez'u0022},{'u0022nom'u0022:'u0022M''u00e9lia'u0022,'u0022prenoms'u0022:'u0022Butler'u0022},{'u0022nom'u0022:'u0022R''u00e1o'u0022,'u0022prenoms'u0022:'u0022Armstrong'u0022}]"}我在我的操作中使用 JMS 序列化程序捆绑包,如下所示:

public function trainingCandidatesAction(Request $request,$id) {
        $request = $this->get('request');
    try{
     if ($request->isXmlHttpRequest() || $request->getMethod() == 'GET' || $request->getMethod() == 'POST') {
            $em = $this->getDoctrine()->getManager();
            $array = $em->getRepository('ParentsBundle:Parents')->getParentsByFormation($id);
            $serializer = $this->container->get('jms_serializer');
            $jsonContent = $serializer->serialize($array,'json');
            }
            return new JsonResponse(array('success'=>true, 'parents'=>$jsonContent));
    }catch('Execption $exception)
    {
         return new JsonResponse(array(
            'success' => false,
            'code'    => $exception->getCode(),
            'message' => $exception->getMessage(),
        ));
    }
        }

我已经通过堆栈溢出上的类似问题提出的各种建议,但无法正确处理,我一定错过了一些东西。

首先,要获得干净的 JSON,您需要在渲染JsonResponse之前解码数据:

return new JsonResponse(array(
    'success'=>true, 
    'parents'=> json_decode($jsonContent),
);

这是因为您的数据已经序列化,并且JsonResponse再次对其进行编码。

然后,如果这不能解决您的错误,请尝试在使用之前解析 json,例如:

$.each(JSON.parse(data.parents), function(i, parent) {
    // ...  
});

希望这对你有帮助。