javascript - 解构 JSON 对象

标签 javascript jquery json

JSON 编码的数组从 PHP 传递到 HTML 文档。目前还不清楚如何将该数组解构为 javascript 可用的片段。例如,考虑以下 HTML:

<div id="options">{"foo":[{"id":1},{"id":3}], "bar":[{"id":2},{"id":4}]}</div>

此数组中唯一先验已知的元素是键 id存在。我知道,索引可以通过

找到
var data = JSON.parse($("#options").text());
$.each(data, function(index) {
  // index will be foo & bar
});

用例是使用索引和 id 向文档中的元素添加属性。我还没有偶然发现返回与每个索引关联的 id 的技术。如何最好地做到这一点?

编辑 - 用例澄清 - 长话短说

我想根据实体的属性(在 Symfony 应用程序中)重新启用表单上的某些选项。禁用的选项无法修改,但也不会保留 - 它们的值设置为 null。我构建了一项服务来确定禁用的选项元素并将这些元素作为 JSON 对象发送到表单文档。我现在假设在创建表单之前不知 Prop 体选项。在上面的示例中,foo & bar代表可能的选项,id对应于选项。例如,Household实体可能有Reason已选择但禁用“低工资”选项(id = 3)。这将显示为 ...id="options">{"reasons":[{"id":3}]}<... 。我将使用此信息删除 disabled="disabled" Reason, id=3(即 id="household_reasons_3" )字段的复选框集中的属性。我希望这是有道理的。

根据请求编辑 #2 - 创建对象的 PHP 代码。

getMetatData()的结果出现在文档中 #options 。从上面的编辑中,家庭实体是 $object .

public function getMetaData($object) {
    $data = array();
    $className = get_class($object);
    $metaData = $this->em->getClassMetadata($className);
    foreach ($metaData->associationMappings as $field => $mapping) {
        if (8 === $mapping['type']) {
            $data[$field] = $this->extractOptions($object, $field);
        }
    }

    return json_encode($data);
}

private function extractOptions($object, $field) {
    $data = [];
    $method = 'get' . ucfirst($field);
    $itemName = substr($field, 0, -1);
    $getter = 'get' . ucfirst($itemName);
    $entity = $object->$method();
    foreach ($entity as $item) {
        if (method_exists($item, 'getEnabled') && false === $item->getEnabled()) {
            $data[] = ['id' => $item->getId()];
        }
    }

    return $data;
}

最佳答案

早在达到无限猴子极限之前,我就偶然发现了一种方法来创建我正在寻找的结果。我感谢所有要求澄清的人。所以,对于对象

{"foo":[{"id":1},{"id":3}], "bar":[{"id":2},{"id":4}] }

脚本

var data = JSON.parse($("#options").text());
var i = 0
var output = [];
$.each(data, function(index, item) {
  $.each(item, function(k, v) {
    output[i] = "household_" + index + "_" + v.id;
    i++;
  });
});
output;

产生这个:

[“household_foo_1”、“household_foo_3”、“household_bar_2”、“household_bar_4”]

我得到了我需要的字符串;我可以从这里拿走它。

关于javascript - 解构 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39985782/

相关文章:

json - 如何在逻辑应用程序中搜索Azure表存储JSON响应?

javascript - 检查密码匹配时出错

javascript - 如何使用jquery移动数据 block

java - 我应该如何将 json 值返回到另一个方法中

C# Newtonsoft JArray。 JSON 无法在空数组中创建空数组

javascript - 按钮不会在 IE 9 中回发

javascript - 捕获模块加载错误并处理它们

javascript - 使用 Ajax 请求作为源数据的 Jquery 自动完成搜索

javascript - 三个jslensflare渲染在外面

javascript - 页面加载时触发 keyup