2016-01-30 31 views
1

我按照以下結構在CloudantDB中創建了文檔。通過Java程序使用選擇器從雲數據庫中獲取數據時獲取異常

{ 
    "_id": "XXXXXXXXXXXXXXXXXXXXXXXXXX", 
    "_rev": "XXXXXXXXXXXXXXXXXXXXXXXXX", 
    "SOCIALKEY": "XXXXXXXXXXXXXXXX", 
    "SCREEN_USER": "XXXXXXXXXXXXX", 
    "TWEETS_FEED": "XXXXXXXXXXXXXXXXXXXXXXXXX", 
    "LOCATION": "XXXXXXXXXXXXXXX", 
    "CREATEDATE": "XXXXXXXXXXXXXXX", 
    "ANALYSIS_STATUS": "N", 
    "SENTIMENT_STATUS": "NA", 
    "MIXED": "NA", 
    "SCORE": "NA" 
} 

我試圖檢索符合條件的所有文檔爲「ANALYSIS_STATUS」=「N」。我正在使用CloudantClient.jar連接CloudantDB &以執行數據庫操作。 我寫下面的代碼來檢索文檔。

public List<TweetsFeed> getTweetFeed() { 
     List<TweetsFeed> tweetList=new ArrayList<TweetsFeed>(); 
     String selector="\"selector\": {\"ANALYSIS_STATUS\" : \"N\"},\"fields\": [\"_id\",\"TWEETS_FEED\"],\"limit\": 10,\"skip\": 0"; 
     try{ 
      db = CloudantClientMgr.getDB(); 
      tweetList=db.findByIndex(selector,TweetsFeed.class); 
      System.out.println("size==>"+tweetList.size()); 
     }catch(Exception e){ 
      e.printStackTrace(); 
     } 
     return tweetList; 
    } 

下面是TweetsFeed.class結構

public class TweetsFeed { 
    public Integer id; 
    public String socialKey; 
    public String screenUser; 
    public String tweetsFeed; 
    public String location; 
    public Date createdate; 
    public String analysisStatus; 
...... 
} 

執行我收到以下錯誤後。

[err] com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 27 
[err] at com.google.gson.Gson.assertFullConsumption(Gson.java:779) 
[err] at com.google.gson.Gson.fromJson(Gson.java:769) 
[err] at com.google.gson.Gson.fromJson(Gson.java:717) 
[err] at com.google.gson.Gson.fromJson(Gson.java:689) 
[err] at com.cloudant.client.api.Database.getFindByIndexBody(Database.java:1102) 
[err] at com.cloudant.client.api.Database.findByIndex(Database.java:360) 
[err] at com.cloudant.client.api.Database.findByIndex(Database.java:323) 
[err] at com.ibm.dao.CloudantDaoImpl.getTweetFeed(CloudantDaoImpl.java:254) 
[err] at com.ibm.service.SocialKeyManagerImpl.getTweetFeed(SocialKeyManagerImpl.java:78) 
[err] at com.ibm.scheduler.SentimentAnalysis.insertAnalysis(SentimentAnalysis.java:41) 
[err] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
[err] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
[err] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
[err] at java.lang.reflect.Method.invoke(Method.java:606) 
[err] at org.springframework.util.MethodInvoker.invoke(MethodInvoker.java:283) 
[err] at org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean$MethodInvokingJob.executeInternal(MethodInvokingJobDetailFactoryBean.java:272) 
[err] at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:86) 
[err] at org.quartz.core.JobRunShell.run(JobRunShell.java:202) 
[err] at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:529) 
[err] Caused by: com.google.gson.stream.MalformedJsonException: Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 27 
[err] at com.google.gson.stream.JsonReader.syntaxError(JsonReader.java:1505) 
[err] at com.google.gson.stream.JsonReader.checkLenient(JsonReader.java:1386) 
[err] at com.google.gson.stream.JsonReader.doPeek(JsonReader.java:531) 
[err] at com.google.gson.stream.JsonReader.peek(JsonReader.java:414) 
[err] at com.google.gson.Gson.assertFullConsumption(Gson.java:775) 
[err] ... 18 more 
Size of List---->0 
Data not available 

代碼有什麼問題?

+0

哪個CloudantClient的版本您使用的? – rhyshort

回答

2

selector字符串應該只是選擇器的JSON。 您需要使用FindByIndexOptions爲您的索引查詢指定的其他參數,並提供給findByIndex方法是這樣的:

String selector="\"selector\": {\"ANALYSIS_STATUS\" : \"N\"}"; 
FindByIndexOptions options = new FindByIndexOptions() 
      .fields("_id") 
      .fields("TWEETS_FEED") 
      .limit(10) 
      .skip(0); 

db.findByIndex(selector, TweetsFeed.class, options); 
+0

我嘗試了上面的代碼,但在TweetsFeed對象中獲得了空值。 – PDH

0

錯誤指示畸形的JSON輸入 - 選擇需要封裝了一個完整的JSON格式{} -

試試下面一個 -

String selector="{\"selector\": {\"ANALYSIS_STATUS\" : \"N\"},\"fields\": [\"_id\",\"TWEETS_FEED\"],\"limit\": 10,\"skip\": 0}"; 
相關問題