从json对象获取值

时间:2015-10-29 11:33:30

标签: java json jsp

我有一个代码,可以从db使用Hibernate获取List个对象。对象的一个​​字段具有XML格式。我在jsp文件中使用此代码获取该字段值:

for(PluginMonitor pm : list ) {
    // parsing xml to json
    JSONObject metricsFieldValue = org.json.XML.toJSONObject(pm.getMetrics());
    Object metricMetric = metricsFieldValue.get("metric");      
}

metricsFieldValue的输出

{
    "metric": [
        {
            "defaultThreshold": "0",
            "preselected": "true",
            "uom": "B/sec",
            "name": "BytesReceivedPersec",
            "type": "integer",
            "displayName": "Input Traffic"
        },
        {
            "defaultThreshold": "0",
            "preselected": "true",
            "uom": "B/sec",
            "name": "BytesSentPersec",
            "type": "integer",
            "displayName": "Output Traffic"
        }
    ]
}

因此metricMetric的输出是一个数组,但我只需要该数组中每个对象的displayNamename。任何想法如何获得这些价值观。

4 个答案:

答案 0 :(得分:1)

尝试单独使用Strings;

String displayName = jo.getJSONArray("metric").getJSONObject(i).getString("displayName");
String name =  jo.getJSONArray("metric").getJSONObject(i).getString("name");

答案 1 :(得分:0)

JSONObject有一个构造函数,可以从另一个JSONObject

中选择特定字段
public JSONObject(JSONObject jo, java.lang.String[] names)
  

从另一个JSONObject的子集构造一个JSONObject   字符串数组用于标识应复制的键   缺少密钥会被忽略。

在你的情况下,你会像这样使用它:

String[] fields = new String[] {"displayName", "name"};
JSONObject onlyNames = new JSONObject(metricsFieldValue, fields);

答案 2 :(得分:0)

JSONArray metric = new JSONArray();
metric = metricsFieldValue.getJSONArray("metric");
for(int i=0; i< metric.length(); i++){
    JSONObject jsonObject = metric.getJSONObject(i);
    String displayName = jsonObject.get("displayName");
    String name = jsonObject.get("name");
}

如果您正在使用(导入)org.json.simple.JSONArray,则必须使用JSONArray.size()来获取所需的数据。但如果您使用的是JSONArray.length(),请使用org.json.JSONArray

答案 3 :(得分:0)

这就是它的工作原理

const char* lookup(const char* extension);

int main(void)
{
    const char* type = "css";
    const char* ending = lookup(type);  
    printf("the exstension: %s\nis of type = %s\n", type, ending);
}

const char* lookup(const char* extension)
{

    char temp[strlen(extension)];

    for (int i = 0; i < strlen(temp); i++)
    {
        if (isalpha(extension[i]))
            temp[i] = tolower(extension[i]);
    }

    printf("temp = %s\n", temp);

    char* filetype = NULL;

    if (strcmp(temp,  "html") == 0)
        strcpy(filetype, "text/html"); 

    else if(strcmp(temp, "css") == 0)
        strcpy(filetype, "text/css");

    else if(strcmp(temp, "js") == 0)
        strcpy(filetype, "text/js");

    else if(strcmp(temp, "jpg") == 0)
        strcpy(filetype, "image/jpg");

    else if(strcmp(temp, "ico" ) == 0)
        strcpy(filetype, "image/x-icon");

    else if(strcmp(temp, "gif") == 0)
        strcpy(filetype, "image/gif");

    else if(strcmp(temp, "png") == 0)
        strcpy(filetype, "image/png");

    else
        return NULL;

    return filetype;
}