【问题标题】:Read part of ORIGINAL JSON string with all spaces and indents读取包含所有空格和缩进的原始 JSON 字符串的一部分
【发布时间】:2019-11-29 03:16:04
【问题描述】:

我的客户将正文中的 json 数据发布到我的 API,是否有一种简单的方法可以从 HttpContext.Request.Body 获取 abc 节点的值(包括 {} 以及)作为 JSON 字符串?最重要的是我需要保留所有原始空格或缩进(如果有)。

P.S abc 始终是第一个节点,而def 是最后一个节点。

谢谢

{
   "abc": {
     ....
   },
   "def":"..."
}

【问题讨论】:

  • 嗨,明!在 C# 中使用 JSON 时,Newtonsoft 是您最好的朋友。 newtonsoft.com/json
  • 您可以使用 Newtonsoft 的 JsonTextReader 来定位元素的开始和结束索引。从那里你可以从原始 JSON 中得到一个子字符串。
  • JsonTextReader 未报告其在底层Stream 中的位置,请参阅How to get detailed position information from JsonTextReader 的讨论线程,该线程未得到答复。您可以通过记录abs 节点的IJsonLineInfo 然后重新读取文件以获取空白来获得所需的内容;参见例如Newtonsoft.Json - Getting corresponding line numbers of deserialized objects from JSON for better error handling.
  • @dbc 以这两个JSON为例,{ "abc" :"def"}{ "abc" :"def"}abc属性的LinePosition:的位置,但不知道是否在abc 前面有 5 个空格,后面有 1 个空格,反之亦然。
  • @Ming - JsonTextReader 没有提供您想要的信息。但是,对于"abc" 属性本身的JsonTextReaderIJsonLineInfo,以及在阅读器位于} 的值"abc" 的结束标记} 时,您可能有通过手动解析加载到string 中的文件内容来提取格式化 JSON 的足够信息。

标签: c# json


【解决方案1】:

最终,我决定先从Stream 中读取字符串,然后使用Regex 作为这种特殊情况的解决方案,我知道这不是很好,但是因为空格和缩进是关键要求之一,为了简单,我很乐意暂时权衡性能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-09
    • 2014-11-06
    • 2022-01-19
    • 2016-06-18
    • 1970-01-01
    • 1970-01-01
    • 2020-06-06
    • 2012-07-25
    相关资源
    最近更新 更多