当前位置: 首页 > 知识库问答 >
问题:

当类型也在响应中时,如何解析JSON响应

马飞
2023-03-14

我从一个web服务调用中得到以下json响应。正如你所看到的,我们将得到什么类型的值作为响应,也是传入类型对象。

 {"settings":[
    {
    "name":"name1",
    "value":4,
    "type":"int"
    },
    {
    "name":"name2",
    "value":false,
    "type":"boolean"
    },
    {
    "name":"name3",
    "type":"array",
    "value":[
    {
    "name":"name3"
    }]}]}
  1. 如何解析这个json
  2. 如何将解析后的值存储在数据库中,在数据库中我有一个包含列名、名称、值等的表

编辑:

目前,我正在将所有值转换为字符串,因为我们无法将布尔值添加到数据库中。

private enum Type{
    INT("int"), BOOLEAN("boolean"), ARRAY("array"),UNKNOWN_TYPE("");

    private String mType;
    Type(String type){
        mType = type;
    }

    public static Type toEnum(String type){
        for (Type value: Type.values()){
            if(value.mType.equals(type)){
                return value;
            }
        }
        return UNKNOWN_TYPE;
    }
}



                String value = null;
                switch (Type.toEnum(type)){
                    case INT:
                        value = String.valueOf(setting.getInt("value"));
                        break;
                    case BOOLEAN:
                        value = String.valueOf(setting.getBoolean("value"));
                        break;
                    case ARRAY:
                        parseJsonArray();
                        break;

                }

这是正确的方法吗?

共有1个答案

柳坚白
2023-03-14

处理可能是少量已知类型中的任何一种的数据项的通常方法是使用标记联合。在Java中,您可以编写这样一个:

// CREATE TABLE dataFromJson (type ENUM('INT', 'BOOLEAN', 'STRING'),
//                            intval INT, boolval INT, stringval LONGTEXT);

class DataItem {
    public enum Type { INT, BOOLEAN, STRING };
    public Type m_type;
    public int m_int;
    public bool m_boolean;
    public String m_string;
    public PreparedStatement toInsertQuery(Connection conn) {
        PreparedStatement ps = conn.prepareStatement("INSERT INTO dataFromJson VALUES (?, ?, ?, ?)");
        ps.setString(1, m_type.toString());
        if (m_type==INT) ps.setInt(2, m_int); else ps.setObject(2, null);
        if (m_type==BOOLEAN) ps.setBoolean(3, m_boolean); else ps.setObject(3, null);
        if (m_type==STRING) ps.setString(4, m_string); else ps.setObject(4, null); 
        return ps;
    }
}

处理JSON数组(和对象)要复杂得多;首先,您必须弄清楚您希望如何表示数据。你希望整个数组是一个字符串吗?您希望数组的前N个元素“分解”成单独的列吗?是否要存储一个整数< code>array_id,即一个单独且更复杂的表< code>ArrayValues的主键?在这里你可以做各种各样的事情...从哲学的角度来看,没有一个是令人满意的。这取决于你以后想用这些数据做什么。

 类似资料:
  • 问题内容: 我收到此响应的结果是对服务器的GET请求 我只想从上述json响应中提取的值。 我正在使用此代码来获得此响应 我的问题是,我该如何解析并获取only 标签的值。谢谢 问题答案: 您可以解析当前的json字符串以从中获取它:

  • 问题内容: 我想解析以下Json响应: 我尝试使用SIMPLE JSON解析器,但这对我不起作用: 问题答案: 输出: 评论: 我没有添加验证 [编辑] 加载json字符串的其他方法

  • 问题内容: 我正在使用CURL发送请求。响应数据类型为。如何解析此数据并将其插入数据库? JSON输出: 问题答案: 如果您的变量是字符串json之类的,则必须使用function将其解析为 对象 或 数组 : 输出值 现在,您可以将变量作为数组使用: 参考文献: json_decode -PHP手册

  • 其答复如下: 我相信问题出在响应前面的jsonFlickrApi上。 执行以下代码时: }

  • 问题内容: 我正在尝试使用C#从rest api json响应中提取一个值。 我有以下代码: 在“响应”消息中,我得到了一个json内容,如下所示: 如何从返回的json响应结果消息中提取以下嵌套值“ id”:“ 521cfcd840926a0b3500449e”? 我正在使用C#。 问题答案: 1>添加此namspace。使用Newtonsoft.Json.Linq; 2>使用此源代码。

  • 我正在解析下面的json,并希望获取EnterpriseFlag的值