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

如何在C#中使用Newtonsoft.Json将JSON转数组并提取指定sms值

提取杂乱JSON中的sms:+9230154XXXXX值(Newtonsoft.Json实现)

我太懂面对结构混乱的JSON时那种无从下手的感觉了!既然你用的是Newtonsoft.Json,咱们不用硬套强类型模型,用动态解析或者递归查找的方式就能精准揪出你要的sms:+格式值。

方法一:递归遍历所有节点(适合完全杂乱的JSON)

如果完全摸不清JSON的层级结构,直接遍历所有字符串类型的节点,筛选出以sms:开头的值就行:

using Newtonsoft.Json.Linq;

// 假设你的JSON字符串存在jsonStr变量里
JObject jsonObj = JObject.Parse(jsonStr);

// 递归查找所有字符串值,筛选符合格式的
var smsValue = jsonObj.Descendants()
    .OfType<JValue>()
    .Where(v => v.Type == JTokenType.String && v.Value.ToString().StartsWith("sms:"))
    .Select(v => v.Value.ToString())
    .FirstOrDefault();

// 输出结果
if (!string.IsNullOrEmpty(smsValue))
{
    Console.WriteLine($"找到目标值:{smsValue}");
}
else
{
    Console.WriteLine("未找到符合格式的sms值");
}

方法二:已知大致路径时用SelectToken(更高效)

如果你能记住目标值所在的大致层级(比如在某个嵌套对象的contact或phone字段下),可以用SelectToken直接定位,避免全量遍历:

// 假设目标值在$.data.user.contact这个路径下(示例路径,根据你的实际JSON调整)
var smsValue = jsonObj.SelectToken("$.data.user.contact")?.Value<string>();

// 或者用通配符匹配不确定的层级,比如:
var smsValue = jsonObj.SelectToken("$..[?(@.StartsWith('sms:'))]")?.Value<string>();

小提示

如果你的JSON里可能有多个sms:格式的值,把FirstOrDefault()换成ToList()就能拿到所有匹配结果。另外,记得处理空值情况,避免空引用异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:51:01