首页 > 解决方案 > 在 F# 中使用 JSON.NET 从 JSON 中删除字段

问题描述

我有记录

type MyType = {
  Name : string
  Description : string
  OtherField : string
}

我想在序列化为 JSON 之前删除一些字段。我怎样才能做到这一点?

标签: jsonf#json.net

解决方案


假设您从

let object = {
  Name = "hi"
  Description = "ho"
  OtherField = "there"
}

#r "nuget:Newtonsoft.Json"
open Newtonsoft.Json
open Newtonsoft.Json.Linq

let json = JsonConvert.SerializeObject object

let fieldsToRemove = [|
  "Name"
  "OtherField"
|]

这是一个将对象作为输入的函数

let removeFromObject (fields : string []) object =
  let jToken = JToken.FromObject object
  let allFields = jToken.Children() |> Seq.map (fun t -> t :?> JProperty)
  let remainingFields = allFields |> Seq.filter (fun f -> Array.contains f.Name fields |> not)
  let newObject = JObject remainingFields
  let newJson = JsonConvert.SerializeObject(newObject, Formatting.Indented)
  newJson

removeFromObject fieldsToRemove object

这里有一个用于获取字符串的适配器

let removeFromString (fields : string []) json =
  let jToken = JObject.Parse json :> JToken
  removeFromObject fields jToken

removeFromString fieldsToRemove json

这是受JSON.NET 如何删除节点的启发


推荐阅读