Twitter JSON失去了属性的报价?

时间:2013-08-21 19:44:07

标签: json twitter twitter4j arrays jsonobject

这是我的JSON的一部分:

  [
  UserJSONImpl{
    id=1489761876,
    name='CharlesPerin',
    screenName='charles_perin',
    location='Paris,
    France',
    description='PhdStudentatINRIA-Univ.Paris-Sud-CNRS-LIMSI#infovis#dataviz#hci',
    isContributorsEnabled=false,
    profileImageUrl='http: //a0.twimg.com/profile_images/3766400220/bbced44afe69e60eb30e00f593a2f3b5_normal.jpeg',
    profileImageUrlHttps='https: //si0.twimg.com/profile_images/3766400220/bbced44afe69e60eb30e00f593a2f3b5_normal.jpeg',
    url='http: //t.co/eYSy04EzEk',
    isProtected=false,
    },
    UserJSONImpl{
        id=19671465,
        name='KevinQuealy',
        screenName='KevinQ',
        location='NewYork,
        NY',
        description='AgraphicseditorattheNewYorkTimes.AdjunctatNYU#SHERP.ReturnedPeaceCorpsvolunteer.Bald,
        Minnesotan,
        talkstoomuch.',
        isContributorsEnabled=false,
        profileImageUrl='http: //a0.twimg.com/profile_images/2213326305/image_normal.jpg',
        profileImageUrlHttps='https: //si0.twimg.com/profile_images/2213326305/image_normal.jpg',
        url='http: //t.co/vb0j99kE3N',
        isProtected=false,
        ...(cont)

直接从调用twitter4j的lookupUsers:

返回
long[] hundredIDs = new long[100];
  org.json.JSONArray users = new org.json.JSONArray();
  for(int a = 0; a < (int)((double)friendArray.length()/100 +1); a++)
  {   

      for(int j = 100*a; j < 100*(a+1); j++)
      {
        hundredIDs[j-100*a] = Long.parseLong(friendArray.getString(j)); 
      }
      users = new org.json.JSONArray(twitter.lookupUsers(hundredIDs)); //lookup users in batches of 100


    for(int k = 0; k < users.length(); k++)
    {
      org.json.JSONObject user = users.getJSONObject(k);
      if(Long.parseLong(user.getString("followers_count")) >= 500)
      {
        String id = user.getString("id"); //get id for each JSONObject
        friendArrayFiltered.add(id); //store ids in another array
      }
    }

由于某种原因,我的代码返回的JSON没有属性周围的标准引号(“id”= ....而不是id = ...)。它似乎不是Twitter API本身的问题,因为它们的示例格式正确:https://dev.twitter.com/docs/api/1/get/users/lookup。 有谁知道问题是什么?

此外,不确定这是否是一个后果,但是当我尝试访问JSONArray的各个元素(如JSONArray [0])时,会返回一个错误,指出JSONArray [0]不是JSONObject。这与上述问题有关吗?

1 个答案:

答案 0 :(得分:0)

它不是JSON,它实际上是由UserJSONImpl#toString()方法生成的,它为User调用返回的每个lookupUsers对象提供了文本表示。

至于你的第二个问题,你不能在Java []类型上使用Object运算符,所以如果没有进一步的信息,我有点不清楚你的意思。

ASIDE

我不确定你为什么要在JSONArrayJSONObject对象中包装twitter4j对象 - 当然你可能有充分的理由这样做在问题中不明显 - 但你可以简单地直接在返回的对象上使用这些方法来获取所需的信息,例如:

final List<User> users = twitter.lookupUsers(hundredIDs);
for (User user : users) {
    final int followersCount = user.getFollowersCount();
    if (followersCount > 500) { 
        ... etc...

查看项目的User JavaDocs和更宽documentation