javascript - 很难将 json 字符串从服务器转换为数组

标签 javascript arrays json

我从服务器取回 json,我想将它变成一个数组,只是为了测试它是否可以工作

JSON.parse(response.data.blocks)

我明白了:

SyntaxError: Unexpected token o in JSON at position 1
    at JSON.parse (<anonymous>)
    at contentblocks.js?KHWUmpg:87149
    at <anonymous>

如何将 block 转换为数组,以便我可以执行此操作:

let blocks = response.data.blocks.sort(function(a,b){
    var x = a.order < b.order? -1:1
    return x
})

我收到一个错误,排序不存在,所以我想我需要将 block 制作为数组,以便我可以对它们进行排序。

这是服务器返回的内容

{
    "status": "success",
    "blocks": {
        "0": {
            "id": 50,
            "content_id": 25,
            "type": "title-block-template",
            "content": "yeah",
            "content_type": null,
            "template_block_id": 1,
            "user_id": null,
            "meta": null,
            "created_at": "2017-08-13 17:27:53",
            "updated_at": "2017-08-13 17:27:53",
            "order": 1,
            "settings": [
                {
                    "id": 12,
                    "key": "order",
                    "value": "1",
                    "type": "integer",
                    "created_at": "2017-08-13 17:17:51",
                    "updated_at": "2017-08-13 17:17:51",
                    "pivot": {
                        "settingable_id": 50,
                        "setting_id": "12"
                    }
                }
            ]
        },
        "1": {
            "id": 51,
            "content_id": 25,
            "type": "images-block-template",
            "content": "[]",
            "content_type": null,
            "template_block_id": 9,
            "user_id": null,
            "meta": null,
            "created_at": "2017-08-13 17:27:53",
            "updated_at": "2017-08-13 17:27:53",
            "order": 3,
            "settings": [
                {
                    "id": 19,
                    "key": "order",
                    "value": "3",
                    "type": "integer",
                    "created_at": "2017-08-13 17:26:19",
                    "updated_at": "2017-08-13 17:30:24",
                    "pivot": {
                        "settingable_id": 51,
                        "setting_id": "19"
                    }
                }
            ]
        }
    }
}

最佳答案

对对象的属性进行排序

不要将其视为对对象进行排序,而是提取属性(放入数组中)并按属性名称对它们进行排序。

假设您的原始对象(您在问题底部列出的对象)名为 server_return_object

使用将 block 提取到对象中

blocks = server_return_object.blocks;

现在我们需要 block 的键(“0”、“1”等)。使用Object.keys()提取它们。

block_keys = Object.keys(blocks);

然后我们可以创建一个数组,每个 block 一个元素。最简单的方法是 .map() 函数,它获取一个项目列表并对它们执行一个函数。

block_array = block_keys.map( key => blocks[key] );

您现在在 block_array 中有一个 block 数组,然后您可以按照您喜欢的任何方式对其进行排序。例如,要按 created_at 排序,您可以使用

block_array.sort(function(a,b){return a.created_at > b.created_at } )

更改 sort() 内部的函数,以返回您想要排序的任何标准。如果是对其中一个属性进行简单排序,您可以将标准(如上所示)设置为大于(或小于,以另一种方式排序)的测试。使用多个标准也可以进行更复杂的排序。

关于javascript - 很难将 json 字符串从服务器转换为数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45663713/

相关文章:

javascript - 当单独的 JS 实体绑定(bind)然后更改数据时,Vue v-model 绑定(bind)的 html 元素无法更新 Vue 实例

android listview和arrayList数据优化

arrays - 为时间轴定义数组的更好方法,它可以更通用

javascript - 如何将 ResultSet 转换为 JSON 对象

javascript - dojo.dnd.moveable,位置为 :fixed

javascript - 日期时间 javascript jquery 的 slider 。需要建议

arrays - 保留每列的 n 个最大值,并在 MATLAB 中将其余值设置为零,无需循环

javascript - 从数组 JSON 输入返回所有字段的 JSON 路径?

json - 如何使用 JSON 对象初始化 TypeScript 对象?

javascript - 如何修复此 java 脚本错误处理行中的单引号