如何通过键引用从JSON对象中删除元素?

时间:2018-01-26 16:12:31

标签: javascript json associative-array

我选择这个JSON结构来存储一些数据,因为我认为用它的键引用每个对象很容易,但我似乎无法按键正确地删除元素。

JSON对象:

[{
    "a74bb26c-c23f-e711-80da-0050568f4ab2": {
        "VersionCode": "0ODD6109",
        "VersionQualifier": "",
        "ProductID": "WRAP",
    }
}, {
    "a74fff6c-c23f-e711-80da-0050568f4ab2": {
        "VersionCode": "0ODD6109",
        "VersionQualifier": "",
        "ProductID": "WRAP",
    }
}]

何时

key="a74fff6c-c23f-e711-80da-0050568f4ab2"

dataObj = {
            "VersionCode": "0ODD6109",
            "VersionQualifier": "",
            "ProductID": "WRAP",
           }

我可以使用以下方式轻松添加项目:

dataObject = an object with properties
newItem = {}
newItem[key] = dataObj
myJsonObj.push(newItem).

当我将密钥作为变量时,如何删除项目?

这没效果:

delete myJsonObj[key]

这也没有奏效:

var index = myJsonObj.indexOf(node, 0);
if (index > -1) {
     myJsonObj.splice(index, 1);
}

3 个答案:

答案 0 :(得分:1)

您的 private List<object> GetNewResxStrings(List<object> NewlyAddedResxFiles) { bool breaker = true; Dictionary<string, int> Exceptionslist = new Dictionary<string, int>(); foreach (var resxfile in NewlyAddedResxFiles) { breaker = true; while (breaker) { using (FileStream fsNew = File.Open(resxfile.ToString(), FileMode.Open, FileAccess.ReadWrite, FileShare.None)) { ResXResourceReader readerNew = new ResXResourceReader(fsNew); try { IDictionaryEnumerator dictNew = readerNew.GetEnumerator(); while (dictNew.MoveNext()) { NewFilesAddedToCurrentVersion.Add(dictNew.Key, dictNew.Value); } Dictionary<object, object> temp = new Dictionary<object, object>(NewFilesAddedToCurrentVersion); NewUtilityResxDictionary.Add(fsNew.Name.ToString(), temp); NameOfChangeNew.Clear(); NameOfChangeOld.Clear(); NewFilesAddedToCurrentVersion.Clear(); breaker = false; } catch (Exception E) { Exceptionslist.Add(E.ToString(), 1); breaker = false; break; } } } } return NewlyAddedResxFiles; } 格式错误。您应该在json之后删除逗号。这是有效的ProductID:"WRAP", <--- this comma

json

删除元素。只需使用:[{ "a74bb26c-c23f-e711-80da-0050568f4ab2": { "VersionCode": "0ODD6109", "VersionQualifier": "", "ProductID": "WRAP" } }, { "a74fff6c-c23f-e711-80da-0050568f4ab2": { "VersionCode": "0ODD6109", "VersionQualifier": "", "ProductID": "WRAP" } }]

答案 1 :(得分:0)

您的JSON对象构造错误。它应该是这样的:

{
  "a74bb26c-c23f-e711-80da-0050568f4ab2": {
      "VersionCode": "0ODD6109",
      "VersionQualifier": "",
      "ProductID": "WRAP"
  },
  "a74fff6c-c23f-e711-80da-0050568f4ab2-unique": {
        "VersionCode": "0ODD6109",
        "VersionQualifier": "",
        "ProductID": "WRAP"
  }
}

通知删除了parensis。

您可以添加以下内容:

dataObject = an_object_with_properties;
myJsonObj[key] = dataObj

在此更改后,您的示例将完美运行:

delete myJsonObj[key]

以下是一个例子:

&#13;
&#13;
const dataObject1 = {
  "VersionCode": "0ODD6109",
  "VersionQualifier": "",
  "ProductID": "WRAP",
}

const dataObject2 = {
  "VersionCode": "0ODD6109",
  "VersionQualifier": "",
  "ProductID": "WRAP",
}

const myJsonObj = {}

myJsonObj['key1'] = dataObject1
myJsonObj['key2'] = dataObject2

console.log('Before delete', myJsonObj)

delete myJsonObj['key1']

console.log('After delete', myJsonObj)
&#13;
&#13;
&#13;

答案 2 :(得分:0)

找到了一个解决方案,但我很想知道是否还有其他人,或者我的数组是否有更好的结构:

newJsonObj = myJsonObj.filter(function (el) { return !el[key]; });