如何检查JSON变量是否存在

时间:2019-08-28 09:09:59

标签: android

如果找不到内容变量,怎么办?

JSON

{
  "transcript": {
    "text": [
      {
        "content": "Tonight we're running on the right track",
        "dur": "2",
        "start": "2.649"
      },
      {
        "dur": "0.5",
        "start": "4.649"
      },
      {
        "dur": "0.5",
        "start": "5.149"
      },
      {
        "dur": "0.5",
        "start": "5.649"
      },
      {
        "dur": "0.5",
        "start": "7.1"
      },
      {
        "content": "I know we're never look back",
        "dur": "1.04",
        "start": "7.6"
      },
      {
        "content": "Oh i",
        "dur": "0.5",
        "start": "12.3"
      },
      {
        "content": "just want to have a good time",
        "dur": "2.16",
        "start": "12.92"
      },
      {
        "content": "Call me or Whatever",
        "dur": "2",
        "start": "15.2"
      },
      {
        "content": "some ### will anything life back",
        "dur": "2.8",
        "start": "17.2"
      },
      {
        "content": "Oh no",
        "dur": "2",
        "start": "20.88"
      },
      {
        "content": "we don't want to be",
        "dur": "1.2",
        "start": "22.96"
      },
      {
        "content": "Sloomo",
        "dur": "0.8",
        "start": "24.16"
      },
      {
        "content": "so my #### says",
        "dur": "1.44",
        "start": "25.52"
      },
      {
        "content": "Let's Go",
        "dur": "2",
        "start": "26.96"
      },
      {
        "content": "To the beat and sweet and sweet",
        "dur": "2",
        "start": "28.96"
      },
      {
        "content": "and see me like",
        "dur": "2",
        "start": "30.96"
      },
      {
        "content": "see me like",
        "dur": "2",
        "start": "33.56"
      },
      {
        "content": "Party like",
        "dur": "2",
        "start": "35.96"
      },
      {
        "content": "Breaking up\nTo the beat like see me like",
        "dur": "2.34",
        "start": "38.26"
      },
      {
        "content": "Pencil or no pencil pencil?",
        "dur": "1.26",
        "start": "48.08"
      },
      {
        "content": "Pencil.",
        "dur": "1.16",
        "start": "51.92"
      },
      {
        "content": "Do you want Steve in the background?",
        "dur": "2",
        "start": "58.04"
      },
      {
        "content": "I don't know. Does he deserve it?",
        "dur": "3.14",
        "start": "61.72"
      },
      {
        "content": "My phone buzzered every time you tagged me.",
        "dur": "3.44",
        "start": "65.1"
      },
      {
        "content": "Maybe someday, I'll let you be my real boyfriend.",
        "dur": "2.42",
        "start": "75.76"
      },
      {
        "content": "You love it.",
        "dur": "2",
        "start": "78.18"
      },
      {
        "content": "Free phone ? Once I hit 2,000.",
        "dur": "2",
        "start": "83.36"
      },
      {
        "content": ""That's that's totally doable." "Just a matter of time." "Your, your first brand deal."",
        "dur": "6.22",
        "start": "86.68"
      },
      {
        "content": "Drop this off at the library, I hate going in there. Of course. Deuces!",
        "dur": "6.64",
        "start": "95.66"
      },
      {
        "content": "Jen ?",
        "dur": "0.5",
        "start": "102.56"
      },
      {
        "content": "We don't say that anymore.",
        "dur": "2",
        "start": "105.02"
      },
      {
        "content": "Right. See ya!",
        "dur": "2",
        "start": "108.38"
      },
      {
        "content": "So, what do you think?",
        "dur": "2",
        "start": "115.58"
      },
      {
        "content": ""Who did them?" "Me!" "How old were you?" "I worked on 'em this week."",
        "dur": "6.52",
        "start": "122.84"
      },
      {
        "content": "Oh.",
        "dur": "0.84",
        "start": "130.96"
      },
      {
        "content": "Yeah, I'm thinking of changing electives, next term maybe taking art.",
        "dur": "4.4",
        "start": "133.2"
      },
      {
        "content": "Okay.",
        "dur": "3.21",
        "start": "149.42"
      },
      {
        "content": "Uhm, no.",
        "dur": "2",
        "start": "152.63"
      },
      {
        "content": ""I'm just starting." "And now it's time to stop." "This...isn't you."",
        "dur": "7.52",
        "start": "156.08"
      },
      {
        "content": "These are bad.",
        "dur": "2",
        "start": "164.93"
      },
      {
        "content": "Okay.",
        "dur": "1.89",
        "start": "169.7"
      },
      {
        "content": "You have to stay in the classes that I'm taking. I need you there. I mean...",
        "dur": "5.18",
        "start": "171.59"
      },
      {
        "content": "Who else is gonna tell me how pretty I am?",
        "dur": "2.059",
        "start": "177.68"
      },
      {
        "content": "Yeah",
        "dur": "2",
        "start": "181.16"
      },
      {
        "content": ""Probably everybody" "Probably, but still I can't have an artsy boyfriend."",
        "dur": "6.11",
        "start": "183.44"
      },
      {
        "content": "So I am the boyfriend ?",
        "dur": "2",
        "start": "191.84"
      },
      {
        "content": "I know we're so cute together. I'm just contouring. *laughs* He's five months older.",
        "dur": "7.489",
        "start": "199.88"
      },
      {
        "content": "I straighten my hair?",
        "dur": "2",
        "start": "209.93"
      },
      {
        "content": "I am not telling you where I live.",
        "dur": "2.149",
        "start": "214.19"
      },
      {
        "content": ""Hey, Nikki. Have you seen the remote?" "I don't watch TV, Dad!"",
        "dur": "4.4",
        "start": "217.7"
      },
      {
        "content": "Your mom's missing the Kardashians.",
        "dur": "2",
        "start": "222.77"
      },
      {
        "content": ""Mom's missing the Kardashians?"",
        "dur": "2.92",
        "start": "225.4"
      },
      {
        "content": ""Yeah, can you help us find the remote please.""
      }
    ]
  }
}

代码

    try {
            JSONObject jsonObject = new JSONObject(String.valueOf(xmlToJson));
            JSONObject transcript = jsonObject.getJSONObject("transcript");
            JSONArray jsonArray = transcript.getJSONArray("text");
            for (int x = 0; x < jsonArray.length(); x++) {
                test += " " + jsonArray.getJSONObject(x).getString("content") + " ";
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }

错误

org.json.JSONException: No value for content

我在这行中有一个错误

test += " " + jsonArray.getJSONObject(x).getString("content") + " ";

非常感谢。

5 个答案:

答案 0 :(得分:1)

您有多种方法可以做到这一点,

我建议不要检查它,而只需使用以下内容获取值

optString()

代替getString,当内容不存在时不会抛出异常

如果您仍然要检查,JSONObject有一个方法

boolean has(String name)

此方法将告诉您密钥是否存在

以下代码应该可以正常工作

    try {
        JSONObject jsonObject = new JSONObject(String.valueOf(xmlToJson));
        JSONObject transcript = jsonObject.getJSONObject("transcript");
        JSONArray jsonArray = transcript.getJSONArray("text");

        JSONObject temp;

        for (int x = 0; x < jsonArray.length(); x++) {
            temp = jsonArray.getJSONObject(x);

            if(temp.has("content")){
               test += " " + temp.getString("content") + " ";
            }


        }
    } catch (JSONException e) {
        e.printStackTrace();
    }

我将使用的替代方法是:

        try {
        JSONObject jsonObject = new JSONObject(String.valueOf(xmlToJson));
        JSONObject transcript = jsonObject.getJSONObject("transcript");
        JSONArray jsonArray = transcript.getJSONArray("text");



        for (int x = 0; x < jsonArray.length(); x++) {

            test += " " + jsonArray.getJSONObject(x).optString("content") + " ";

        }
    } catch (JSONException e) {
        e.printStackTrace();
    }

答案 1 :(得分:1)

尝试使用像

因此,请尝试将解析数据与示例jsonObject.optJsonObject("LatLng")optString()

一起使用

也使用not null条件

答案 2 :(得分:1)

尝试此代码

<td  [innerHTML]="callTree.contact | safeHtml"></td>

答案 3 :(得分:0)

您可以使用has来检查可用性

.has(name)

您可以使用

检查无效性
.get(name).isJsonNull

我通常使用BaseDeserializer来检查参数

open class BaseDeserializer {

    fun check(json: JsonObject, name: String): Boolean {
        return hashValue(json, name) && checkValue(json, name)
    }

    private fun checkValue(json: JsonObject, name: String): Boolean {
        return !json.get(name).isJsonNull
    }

    private fun hashValue(json: JsonObject, name: String): Boolean {
        return json.has(name)
    }
}

更新

更新了给定的示例。

try {
    JSONObject jsonObject = new JSONObject(String.valueOf(xmlToJson));
    JSONObject transcript = jsonObject.getJSONObject("transcript");
    JSONArray jsonArray = transcript.getJSONArray("text");
    for (int x = 0; x < jsonArray.length(); x++) {
        JSONObject item = jsonArray.getJSONObject(x);
        if(check(item, "content") {
            test += " " + jsonArray.getJSONObject(x).getString("content") + " ";
        }
    }
} catch (JSONException e) {
    e.printStackTrace();
}

.isJsonNull类型中,.isJsonNull()在Kotlin中也等效于JsonElement

答案 4 :(得分:0)

您拥有的json条目

  {
    "dur": "0.5",
    "start": "4.649"
  },
  {
    "dur": "0.5",
    "start": "5.149"
  },
  {
    "dur": "0.5",
    "start": "5.649"
  },
  {
    "dur": "0.5",
    "start": "7.1"
  },
  {
    "content": "I know we&#39;re never look back",
    "dur": "1.04",
    "start": "7.6"
  }

其中一些条目中没有变量content,因此在尝试访问它时会引发错误。 您可以做的就是添加if支票。

for (int x = 0; x < jsonArray.length(); x++) {
             JSONObject jsonObj = jsonArray.getJSONObject(x);
             if(jsonObj.has("content"){
               test += " " + jsonObj.getString("content") + " ";
              }
            }