开发者

Is JSON.parse supposed to be recursive?

开发者 https://www.devze.com 2023-01-23 14:44 出处:网络
I am parsing a json string like so: ring = JSON.parse(response); Now, ring is an object but ring.stones is just a string when it should be an object as well.

I am parsing a json string like so:

ring = JSON.parse(response);

Now, ring is an object but ring.stones is just a string when it should be an object as well.

If I call:

ring.stones = JSON.parse(ring.stones);

It is now the correct object.

I didn't know if this is correct behavior or if maybe I have an issue somewhere stopping it from parsing recursively? If it is supposed to parse recursively, are there any known issues that would prevent it?


Update

Here is the full response before parsing:

{"ring_id":"9","stone_count":"4","style_number":"style 4","syn10":"436.15","gen10":"489.39","syn14":"627.60","gen14":"680.85","available":"yes","type":"ring","engravings_count":"0","engravings_char_count":"0","engravings_band":"10","stones":"[{\"stone_id\":\"27\",\"ring_id\":\"9\",\"stone_shape\":\"round\",\"stone_x\":\"132.80\",\"stone_y\":\"114.50\",\"stone_width\":\"71.60\",\"stone_height\":\"71.60\",\"stone_rotation\":\"0.00\",\"stone_number\":\"1\",\"stone_mm_width\":\"5.00\",\"stone_mm_height\":\"5.00\"},{\"stone_id\":\"28\",\"ring_id\":\"9\",\"stone_shape\":\"round\",\"开发者_开发百科stone_x\":\"100.50\",\"stone_y\":\"166.20\",\"stone_width\":\"36.20\",\"stone_height\":\"36.60\",\"stone_rotation\":\"0.00\",\"stone_number\":\"2\",\"stone_mm_width\":\"2.50\",\"stone_mm_height\":\"2.50\"},{\"stone_id\":\"29\",\"ring_id\":\"9\",\"stone_shape\":\"round\",\"stone_x\":\"200.20\",\"stone_y\":\"105.10\",\"stone_width\":\"33.90\",\"stone_height\":\"33.90\",\"stone_rotation\":\"0.00\",\"stone_number\":\"3\",\"stone_mm_width\":\"2.50\",\"stone_mm_height\":\"2.50\"},{\"stone_id\":\"30\",\"ring_id\":\"9\",\"stone_shape\":\"round\",\"stone_x\":\"165.80\",\"stone_y\":\"82.50\",\"stone_width\":\"35.50\",\"stone_height\":\"33.90\",\"stone_rotation\":\"0.00\",\"stone_number\":\"4\",\"stone_mm_width\":\"2.50\",\"stone_mm_height\":\"2.50\"}]","images":"[{\"title\":\"white gold\",\"source\":\"Style4_4_W_M.png\"},{\"title\":\"yellow gold\",\"source\":\"Style4_4_Y_M.png\"}]"}


Update 2

Based on mikerobi's answer I was able to figure out what was happening:

Here is where I encoded it:

$row = $sth->fetch(PDO::FETCH_ASSOC);

$row['stones'] = getStones($ring_id);
$row['images'] = getRingVariations($ring_id);

return json_encode($row);

But the functions getStones and getRingVariations were returning json_encode'd strings. I needed to change them to return plain strings.


Your JSON structure is wrong, it is wrapping stones in quotes, turning it into a string.

Your JSON looks like:

{
    stones: "[{\"stone_id":\"27\"},{\"stone_id\":\"27\"}]"
}

It should look like:

{
    stones: [{"stone_id": 27},{"stone_id": 27}]
}

EDIT

It appears you are converting all values to string, including numbers, I updated my example to reflect this.

Also, I'm guessing by the output that you are writing your own code to serialize the JSON, I highly recommend using an existing library.


It is recursive, but your input string (response) is not in correct format. Get rid of those escape characters (\") and try again.

0

精彩评论

暂无评论...
验证码 换一张
取 消