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

ASP.NET Core Web API向PostgreSQL写入JSON数据报错排查

解决PostgreSQL jsonb字段写入时的22P02无效JSON语法错误

错误原因

该错误表明传入的coordinate字段内容不符合PostgreSQL的JSON格式要求,可能是前端传入内容非合法JSON、模型绑定解析错误,或是字符串本身格式存在问题。

排查与解决步骤

1. 获取详细错误信息

修改数据库连接字符串,添加Include Error Detail=true,即可查看具体的JSON格式错误细节,便于精准定位问题:

Server=你的服务器地址;Database=你的数据库名;User Id=用户名;Password=密码;Include Error Detail=true;

2. 针对不同场景修复

场景1:前端传入的JSON格式不合法

  • 确保前端发送的coordinate是标准JSON字符串,例如坐标数组需传 "[[116.3,39.9],[116.4,39.8]]",对象需传 "{"x":116.3,"y":39.9}",不能传普通字符串(如"116.3,39.9")。
  • 前端可通过JSON.stringify()将JS对象转换为标准JSON字符串后再发送。

场景2:模型绑定导致的解析问题

若前端直接传递JSON对象(而非字符串),建议将模型的coordinate字段改为JSON专用类型,规避字符串格式问题:

  • 使用System.Text.Json的JsonElement:
using System.Text.Json;

public class Garden
{
    public int Id { get; set; } 
    public int tenant_id { get; set; }
    public int land_id { get; set; }
    public int garden_area { get; set; }
    [Column(TypeName = "jsonb")]
    public JsonElement coordinate { get; set; }
}
  • 或使用Newtonsoft.Json的JObject:
using Newtonsoft.Json.Linq;

public class Garden
{
    public int Id { get; set; } 
    public int tenant_id { get; set; }
    public int land_id { get; set; }
    public int garden_area { get; set; }
    [Column(TypeName = "jsonb")]
    public JObject coordinate { get; set; }
}

此时前端直接传JSON对象,模型绑定会自动处理,EF Core也能正确写入jsonb字段。

场景3:坚持使用string类型的处理方式

若必须用string存储,可在保存前验证JSON合法性,提前拦截错误:

public Garden CreateOneGarden(Garden garden)
{
    if (garden == null)
        throw new ArgumentNullException(nameof(garden));
    
    // 验证coordinate是否为合法JSON
    try
    {
        JsonDocument.Parse(garden.coordinate);
    }
    catch (JsonException ex)
    {
        throw new ArgumentException("coordinate不是合法的JSON格式", ex);
    }
    
    _manager.GardenRepository.CreateOneGarden(garden);
    _manager.Save();
    return garden;
}

3. 确认数据库表字段类型

确保garden表的coordinate字段确实为jsonb类型,若此前为其他类型(如varchar),执行以下SQL修改表结构:

ALTER TABLE garden ALTER COLUMN coordinate TYPE jsonb USING coordinate::jsonb;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 18:16:14