You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何NewtonSoft无法解析该JSON?报错:当前项为数组而非对象

JSON解析失败原因及解决方法

问题描述

用户提供的JSON内容经验证为合法格式:

stringstuff =  "[
  {
    \"data\": {
      \"user\": {
        \"email\": \"john@doe.com\",
        \"external-id\": \"47b4-af36-e9fddecdb755\"
      },
      \"session-token\": \"BNIYdxZZew5KWnKHNZMjn8J3Q-Ii2q7Ifcs5klkginluGHhEalz-uA+C\"
    },
    \"context\": \"/sessions\"
  }
]";

执行代码var jtoken = JObject.Parse(stringStuff)时抛出如下异常:

Newtonsoft.Json.JsonReaderException: Error reading JObject from JsonReader. Current JsonReader item is not an object: StartArray. Path '', line 1, position 1.
   at Newtonsoft.Json.Linq.JObject.Load(JsonReader reader, JsonLoadSettings settings)
   at Newtonsoft.Json.Linq.JObject.Parse(String json, JsonLoadSettings settings)
   at Newtonsoft.Json.Linq.JObject.Parse(String json)
   at TastyWorksAPI.URLGetRestValues.<Authorize>d__2.MoveNext() in C:\Users\synct\OneDrive\Documents\Projects\API\API.cs:line 61

失败原因

  • 目标JSON的根节点是数组(由[]包裹),但JObject.Parse()方法仅支持解析根节点为对象(由{}包裹)的JSON。
  • 异常信息已明确指出问题:解析器预期读取对象,却读到了数组的起始标记StartArray。

解决方法

有两种可行方案:

  1. 使用对应类型的解析方法:因为JSON根是数组,直接调用JArray.Parse()解析:
var jArray = JArray.Parse(stringStuff);
// 如需获取数组中的第一个对象,可执行:
var jToken = jArray[0];
  1. 调整JSON结构(若业务允许):将根节点改为对象,在外层添加包裹结构,示例如下:
{
  "items": [
    {
      "data": {
        "user": {
          "email": "john@doe.com",
          "external-id": "47b4-af36-e9fddecdb755"
        },
        "session-token": "BNIYdxZZew5KWnKHNZMjn8J3Q-Ii2q7Ifcs5klkginluGHhEalz-uA+C"
      },
      "context": "/sessions"
    }
  ]
}

调整后即可继续使用JObject.Parse()解析,之后通过jObject["items"]获取数组内容。

内容的提问来源于stack exchange,提问作者Ivan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 05:27:32