2017-06-13 1 views
2

Ich habe die folgende Antwort von einer GET-Anforderung an einen API-Endpunkt konvertieren:Wie JSON-Objekt Array von String und Zahl in JavaScript

{ 
    "success": true, 
    "data": { 
    "categories": [ 
     { 
      "id": 1, 
      "label": "Default", 
      "url": "default", 
      "num_of_subs": 0 
     }, 
     { 
      "id": 2, 
      "label": "Pet Grooming", 
      "url": "pet-grooming", 
      "num_of_subs": 2 
     }, 
    ], 
    } 
} 

Hier ist der Abrufcode:

const sendRegisterData = fetch('https://sg.cuzzey.com/api/listings/categories', { 
     method: 'GET', 
     headers: { 
      'Accept': 'application/json', 
      'Content-Type': 'application/json', 
     }, 
    }) 
     .then((response) => response.text()) 
     .then((responseText) => { 
      var response_final = JSON.parse(responseText); 
      if (response_final.success) { 
       this.setState({ 
        categories: response_final.data.categories, 
       }) 
      } 
     }) 

Was ich tun möchte, ist, die Daten aus den Kategorien zu erhalten und sie als String und Nummer (ID und num_of_subs als Nummer, Label und URL als String) auszudrucken. Hier ist, was ich getan habe:

const category_options = this.state.categories.map(category => { 
     return [<Text key={category.id} style={styles.smallTextBox}> {category.id} {'\n'}</Text>, 
     <Text key={category.label} style={styles.smallTextBox}> {category.label} {'\n'}</Text>, 
     <Text key={category.num_of_subs} style={styles.smallTextBox}> {category.num_of_subs} {'\n'}</Text>] 
    }) 

<ModalDropdown options={category_options} onSelect={(idx, label) => this.getCategory(idx, label)}> 
       <Text style={styles.smallTextBox}> {this.state.selected_category} </Text> 
</ModalDropdown> 

ich diesen Code verwendet, um den Wert von id, Label und num_of_subs zu erhalten:

getCategory = (idx, value) => { 
    this.setState({ category_id: value[0], selected_category: value[1], numSubs: value[2] }) 
} 

Wenn ich drucken category_id, selected_category und numSubs die Werte korrekt sind. Sie sind jedoch Objekttypen und nicht String/Zahl. Ich möchte die Werte manipulieren, aber ich weiß nicht, wie man sie in String/Zahl umwandelt. Ich habe versucht, String(), Number(), parseInt(), JSON.parse(), toString() zu verwenden, aber keiner scheint zu arbeiten, da sie alle "Objekt" ergeben, wenn ich den Typ der Werte ausdrucke.

Kann ich fragen, gibt es eine Möglichkeit, dies zu lösen?

+0

können Sie ein Beispiel für die Ausgabe zur Verfügung stellen möchten Sie – Rick

+0

Ich mag wäre in der Lage sein, etwas zu tun wie: 'if (dies. state.numSubs> 0) { render_something() else { render_something_else() } ' Derzeit ist der numSubs keine Nummer, damit ich es nicht mit irgendetwas vergleichen können. –

Antwort

2

Ihr Code funktioniert nicht, weil Sie nicht durch das Array von Objekten iterieren. Sie geben einfach das Objekt von Arrays zurück. Dies ist, warum Sie nicht den Wert extrahieren

var items = [{ 
 
    "success": true, 
 
    "data": { 
 
    "categories": [{ 
 
     "id": 1, 
 
     "label": "Default", 
 
     "url": "default", 
 
     "num_of_subs": 0 
 
     }, 
 
     { 
 
     "id": 2, 
 
     "label": "Pet Grooming", 
 
     "url": "pet-grooming", 
 
     "num_of_subs": 2 
 
     }, 
 
    ], 
 
    } 
 

 
}] 
 

 
setState = []; 
 
var catagories = items.map(x => x.data.categories); 
 
catagories = catagories.reduceRight(x => x.cantact([])); 
 
getCategory = (values) => { 
 
    for (let value of values) { 
 
    setState.push({ 
 
     category_id: value.id, 
 
     selected_category: value.label, 
 
     numSubs: value.num_of_subs 
 
    }) 
 
    } 
 
} 
 

 
var output = getCategory(catagories) 
 
var results = setState.filter(x => x.numSubs > 0) 
 

 
console.log(results);

+0

Kann ich fragen, was diese Zeile 'catagories = catagories.reduceRight (x => x.cantact ([]));' tun? Genauer gesagt, was macht "cantact ([])"? –

+0

@Nguyen Dung entfernt das äußere Array. Können Sie die Antwort auswählen, wenn Sie sie nützlich fanden? – Rick

Verwandte Themen